Массив char или std :: string для публичной библиотеки? - PullRequest
2 голосов
/ 07 декабря 2009

мой вопрос прост:
Должен ли я использовать массив символов, например:

char *buf, buf2[MAX_STRING_LENGTH]  

и т. Д. Или я должен использовать std :: string в библиотеке, которая будет использоваться другими программистами, где они могут использовать ее на любом SO и компиляторе по своему выбору?

Учитывая производительность и портативность ...

с моей точки зрения, std-строки проще и производительность одинакова или разница слишком мала, чтобы не использовать std: string, о переносимости я не знаю. Я предполагаю, что, как это принято, не должно быть никакого компилятора, который компилирует C ++ без него, по крайней мере, любого важного компилятора.

EDIT:
Библиотека будет скомпилирована на 3 основных ОС и теоретически будет распространяться как lib

Ваши мысли?

ти
Джо

Ответы [ 5 ]

5 голосов
/ 07 декабря 2009

Зависит от того, как эта библиотека будет использоваться в сочетании с клиентским кодом. Если он будет связан динамически и у вас есть набор API для клиента - вам лучше использовать строки байтов с нулевым символом в конце (т.е. char *) и их широкие символы. Если вы говорите об их использовании в своем коде, вы, безусловно, можете использовать std::string. Если он будет включен в исходную форму - std::string отлично работает.

3 голосов
/ 07 декабря 2009

Но если ваша библиотека поставляется в виде DLL, ваши пользователи должны будут использовать ту же реализацию std :: string. Они не смогут использовать STLPort (или любую другую реализацию), если ваша библиотека была построена с использованием Microsoft STL.

2 голосов
/ 07 декабря 2009

Пока вы нацеливаетесь на чистый C ++ для своей библиотеки, использование std :: string хорошо и даже желательно. Однако выполнение этого связывает вас с конкретной реализацией C ++ (той, которая использовалась для сборки вашей библиотеки), и ее нельзя связать с другими реализациями C ++ или другими языками.

Часто очень желательно дать библиотеке интерфейс C, а не C ++. Таким образом, его можно использовать с любым другим языком, который предоставляет интерфейс сторонней функции C (а это большинство из них). Для интерфейса C вам нужно использовать char *

1 голос
/ 07 декабря 2009

Я бы порекомендовал просто использовать std :: string. Кроме того, если вам нужна совместимость с библиотеками, для которых требуются строки в стиле C (например, в которых используется C-совместимый API), вы всегда можете просто использовать метод c_str () std :: string.

0 голосов
/ 07 декабря 2009

В целом, вам будет лучше использовать std :: string, разумеется, для вызовов внутри вашей библиотеки.

Для вашего API это зависит от его назначения. Для внутреннего использования в вашей организации, API, который использует std :: string, вероятно, подойдет. Для внешнего использования вы можете предоставить C API, который использует char *

...