какой заголовочный файл C ++ объявляет strlen?

Я думаю, что единственный способ инициализировать элементы данных const состоит в списке инициализации

Например. в заголовке:

class C
{
    C();
private:
    const int x;
    int y;
}

И в файле cpp:

C::C() :
    x( 10 ),
    y( 10 )
{
    x = 20; // fails
    y = 20;
}
17
задан pb2q 8 October 2013 в 03:24
поделиться

2 ответа

Функция strlen () объявлена ​​в заголовочном файле string.h

Из библиотеки GNU C

7
ответ дан slash28cu 8 October 2013 в 03:24
поделиться

К какой библиотеке принадлежит strlen ()? Это относится к cstring? или строка?

Ни то, ни другое. cstring и string не являются библиотеками , они являются заголовочными файлами , которые определяют интерфейс для различных функций и классов.

Стандарт языка Си говорит, что функция strlen объявлена ​​в заголовочном файле <string.h>. В C ++ включение <string.h> помещает strlen в глобальное пространство имен, в то время как включение <cstring> вместо этого помещает strlen в пространство имен std.

Фактическая реализация функции функции strlen находится в стандартной библиотеке C (также известной как libc или CRT на некоторых платформах). Обычно это связано с вашим исполняемым файлом во время ссылки.

Почему он работает без включения строки библиотеки или cstring?

В вашем конкретном компиляторе и инструментарии, так получилось, что заголовочный файл <iostream> включает в себя <cstring>, Это означает, что любой код, который включает первый, также получает последний бесплатно. Это деталь реализации , на которую нельзя полагаться - если вы скомпилируете свой код с другим компилятором, вы можете внезапно оказаться в море ошибок компилятора.

Надо также включить сюда <cstring>; даже если это не требуется для вашего конкретного компилятора, это может быть необходимо для других компиляторов.

18
ответ дан Adam Rosenfield 8 October 2013 в 03:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: