Вопросы с тегом «c++-faq»

873
Почему программисты на C ++ должны минимизировать использование «нового»?

Я наткнулся на вопрос переполнения стека Утечка памяти с помощью std :: string при использовании std :: list <std :: string> , и один из комментариев говорит об этом: Прекратите использовать newтак много. Я не вижу причин, по которым ты использовал новое, где бы ты ни был. Вы можете создавать...

801
Что означает T && (двойной амперсанд) в C ++ 11?

Я изучил некоторые из новых функций C ++ 11, и одна из них я заметил, это двойной амперсанд при объявлении переменных, например T&& var. Для начала, как зовут этого зверя? Я бы хотел, чтобы Google позволил нам искать такие знаки препинания, как этот. Что именно это значит? На первый взгляд,...

788
Зачем использовать явно бессмысленные операторы do-while и if-else в макросах?

Во многих макросах C / C ++ я вижу код макроса, заключенный в нечто вроде бессмысленного do whileцикла. Вот примеры. #define FOO(X) do { f(X); g(X); } while (0) #define FOO(X) if (1) { f(X); g(X); } else Я не вижу, что do whileделает. Почему бы просто не написать это без этого? #define FOO(X) f(X);...

742
std :: wstring VS std :: string

Я не могу понять разницу между std::stringи std::wstring. Я знаю, wstringподдерживает широкие символы, такие как символы Юникода. У меня есть следующие вопросы: Когда я должен использовать std::wstringболее std::string? Может ли std::stringсодержать весь набор символов ASCII, включая специальные...

697
Какой стандарт C ++ указывает размер типа int, long?

Я ищу подробную информацию о размере основных типов C ++. Я знаю, что это зависит от архитектуры (16 бит, 32 бита, 64 бита) и компилятора. Но есть ли стандарты для C ++? Я использую Visual Studio 2008 на 32-битной архитектуре. Вот что я получаю: char : 1 byte short : 2 bytes int : 4 bytes long : 4...

602
Когда я могу использовать предварительную декларацию?

Я ищу определение, когда мне разрешено делать предварительное объявление класса в заголовочном файле другого класса: Могу ли я сделать это для базового класса, для класса, который является членом, для класса, переданного функции-члену по ссылке и т....

595
Почему iostream :: eof внутри условия цикла (т.е. `while (! Stream.eof ())`) считается неправильным?

Я только что нашел комментарий в этом ответе о том, что использование iostream::eofв условии цикла «почти наверняка неправильно». Я обычно использую что-то вроде while(cin>>n)- что, я думаю, неявно проверяет EOF. Почему проверка на eof явно использует while (!cin.eof())неправильно? Чем он...

569
C ++: «std :: endl» против «\ n»

Многие книги C ++ содержат пример кода, подобного этому ... std::cout << "Test line" << std::endl; ... так что я всегда так делал. Но я видел много кода от таких разработчиков: std::cout << "Test line\n"; Есть ли техническая причина, чтобы отдавать предпочтение одному над другим,...

543
Правила аннулирования итераторов

Каковы правила аннулирования итераторов для контейнеров C ++? Желательно в формате сводного списка. (Примечание. Предполагается, что это будет вход в FAQ по C ++ в Stack Overflow . Если вы хотите критиковать идею предоставления FAQ в этой форме, то публикация в meta, с которой все это началось,...

480
Как я могу использовать массивы в C ++?

C ++ унаследовал массивы от C, где они используются практически везде. C ++ предоставляет абстракции, которые проще в использовании и менее подвержены ошибкам ( std::vector<T>начиная с C ++ 98 и std::array<T, n>начиная с C ++ 11 ), поэтому потребность в массивах возникает не так часто,...

446
В чем разница между «STL» и «C ++ Standard Library»?

Кто-то обратил мое внимание на эту статью , утверждая, что (я перефразирую) термин STL неправильно используется для ссылки на всю Стандартную библиотеку C ++ вместо частей, взятых из SGI STL. (...) это относится к «STL», несмотря на то, что очень немногие люди все еще используют STL (который был...

441
Каковы различия между структурой и классом в C ++?

Этот вопрос уже задавался в контексте C # /. Net . Теперь я хотел бы изучить различия между структурой и классом в C ++. Пожалуйста, обсудите технические различия, а также причины выбора того или иного в дизайне ОО. Начну с очевидной разницы: Если вы не укажете public:или private:, члены структуры...

438
Каковы основные цели использования std :: forward и какие проблемы он решает?

При совершенной пересылке std::forwardиспользуется для преобразования именованных ссылок rvalue t1и t2в безымянные ссылки rvalue. Какова цель сделать это? Как это повлияет на вызываемую функцию, innerесли мы оставим t1& t2как значения? template <typename T1, typename T2> void...

435
C ++ 11 значения и путаница в семантике перемещения (оператор return)

Я пытаюсь понять rvalue ссылки и переместить семантику C ++ 11. В чем разница между этими примерами, и какой из них не будет делать векторные копии? Первый пример std::vector<int> return_vector(void) { std::vector<int> tmp {1,2,3,4,5}; return tmp; } std::vector<int>...