Все вопросы: [c++-faq]

51 вопросов

353
голосов
12ответов
105409 просмотров

Что это за странный синтаксис элемента-двоеточия (":") в конструкторе?

Недавно я видел такой пример: #include <iostream> class Foo { public: int bar; Foo(int num): bar(num) {}; }; int main(void) { std::cout << Foo(42).bar << std::endl; return 0; } Что означает этот странный номер : bar(num)?Кажется, что это как-то инициализирует п...

191
голосов
2ответов
31683 просмотров

Что означают следующие фразы в C ++: инициализация нуля, значения по умолчанию и значения?

Что означают следующие фразы в C ++: инициализация нуля , инициализация по умолчанию и инициализация значения Что о них должен знать разработчик на C ++?

228
голосов
11ответов
96426 просмотров

How come a non-const reference cannot bind to a temporary object?

Why is it not allowed to get non-const reference to a temporary object, which function getx() returns? Clearly, this is prohibited by C++ Standard but I am interested in the purpose of such restriction, not a reference to the standard. struct X { X& ref() { return *this; } }; X getx(...

141
голосов
3ответов
34931 просмотров

Which iomanip manipulators are 'sticky'?

I recently had a problem creating a stringstream due to the fact that I incorrectly assumed std::setw() would affect the stringstream for every insertion, until I changed it explicitly. However, it is always unset after the insertion. // With timestruct with value of 'Oct 7 9:04 AM' std::strings...

24
голосов
2ответов
7019 просмотров

Template specialization of particular members?

Is it possible to specialize particular members of a template class? Something like: template <typename T,bool B> struct X { void Specialized(); }; template <typename T> void X<T,true>::Specialized() { ... } template <typename T> void X<T,false>::Specializ...

2713
голосов
38ответов
846388 просмотров

Why is "using namespace std;" considered bad practice?

I've been told by others that writing using namespace std; in code is wrong, and that I should use std::cout and std::cin directly instead. Why is using namespace std; considered a bad practice? Is it inefficient or does it risk declaring ambiguous variables (variables that share the same name a...

870
голосов
23ответов
368291 просмотров
346
голосов
9ответов
133927 просмотров

What is external linkage and internal linkage?

I want to understand the external linkage and internal linkage and their difference. I also want to know the meaning of const variables internally link by default unless otherwise declared as extern.

21
голосов
5ответов
16833 просмотров

Convert string to int with bool/fail in C++

I have a std::string which could be a string or could be a value (such as 0). What is the best or easiest way to convert the std::string to int with the ability to fail? I want a C++ version of C#'s Int32.TryParse.

255
голосов
3ответов
67076 просмотров

Constructor initialization-list evaluation order

I have a constructor that takes some arguments. I had assumed that they were constructed in the order listed, but in one case it appears they were being constructed in reverse resulting in an abort. When I reversed the arguments the program stopped aborting. This is an example of the syntax I'm...

43
голосов
4ответов
16781 просмотров

Why doesn't a derived template class have access to a base template class' identifiers?

Consider: template <typename T> class Base { public: static const bool ZEROFILL = true; static const bool NO_ZEROFILL = false; } template <typename T> class Derived : public Base<T> { public: Derived( bool initZero = NO_ZEROFILL ); // NO_ZER...

1041
голосов
15ответов
678275 просмотров

Разница между частным, публичным и защищенным наследованием

В чем разница между наследованием public, private и protected в C ++? Все вопросы, которые я нашел по SO, относятся к конкретным случаям.

92
голосов
16ответов
111547 просмотров

Лучшие практики для операций кругового сдвига (поворота) в C ++

Операторы сдвига влево и вправо (<>) уже доступны в C ++. Однако я не мог понять, как выполнять операции кругового сдвига или поворота. Как можно выполнять такие операции, как «Повернуть влево» и «Повернуть вправо»? Здесь дважды вращается вправо Initial --> 1000 0011 0100 0010 ...

348
голосов
16ответов
301904 просмотров

Является ли практика возврата ссылочной переменной C ++ злом?

Я думаю, это немного субъективно; Я не уверен, что мнение будет единодушным (я видел много фрагментов кода, в которых возвращаются ссылки). Согласно комментарию к этот вопрос, который я только что задал, относительно инициализации ссылки , возвращение ссылки может быть опасным, потому что [к...

746
голосов
10ответов
265555 просмотров

Значение 'const' last в объявлении функции класса?

Что означает const в подобных объявлениях? const меня смущает. class foobar { public: operator int () const; const char* foo() const; };

247
голосов
14ответов
161439 просмотров

Указатель на член данных класса ":: *"

Я наткнулся на этот странный фрагмент кода, который отлично компилируется: class Car { public: int speed; }; int main() { int Car::*pSpeed = &Car::speed; return 0; } Почему в C ++ есть этот указатель на нестатический член данных класса? Как используется этот стран...

186
голосов
2ответов
30742 просмотров

Почему это указатель, а не ссылка?

Я читал ответы на этот вопрос Плюсы и минусы C ++ и возникли эти сомнения при чтении комментариев. программистов часто сбивает с толку тот факт, что «this» является указателем, а не ссылкой. еще одна путаница заключается в том, почему «hello» не относится к типу std :: string, а оценивается...

365
голосов
11ответов
205902 просмотров

Устранение ошибок сборки из-за циклической зависимости между классами

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

999
голосов
6ответов
112563 просмотров

Имеют ли значение круглые скобки после имени типа для нового?

Если Test - обычный класс, есть ли разница между: Test* test = new Test; и Test* test = new Test();

1155
голосов
6ответов
172897 просмотров

Где и почему мне нужно поместить ключевые слова "шаблон" и "название типа"?

Где и почему в шаблонах нужно указывать typename и template для зависимых имен? В любом случае, что такое зависимые имена? У меня есть следующий код: template <typename T, typename Tail> // Tail will be a UnionNode too. struct UnionNode : public Tail { // ... template<typ...

123
голосов
10ответов
56562 просмотров

Правильное использование стека и кучи в C ++?

Я занимаюсь программированием некоторое время, но в основном это были Java и C #. На самом деле мне никогда не приходилось управлять памятью самостоятельно. Я недавно начал программировать на C ++ и немного запутался, когда мне следует хранить вещи в стеке, а когда - в куче. Я понимаю, что пе...

704
голосов
24ответов
1235924 просмотров

Что в стандарте C ++ определяет размер типа int, long?

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

607
голосов
13ответов
248129 просмотров

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

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

83
голосов
4ответов
73917 просмотров

Как вы сериализуете объект в C ++?

У меня есть небольшая иерархия объектов, которые мне нужно сериализовать и передать через соединение сокета. Мне нужно как сериализовать объект, так и десериализовать его в зависимости от типа. Есть ли простой способ сделать это в C ++ (как в Java)? Существуют ли онлайн-образцы кода или учебн...

1822
голосов
17ответов
518540 просмотров

Почему шаблоны можно реализовать только в файле заголовка?

Цитата из Стандартная библиотека C ++: учебник и справочник : Единственный переносимый способ использования шаблонов на данный момент - реализовать их в файлах заголовков с помощью встроенных функций. Почему это? (Уточнение: файлы заголовков не являются единственным переносимым р...

91
голосов
2ответов
43236 просмотров

Функция с тем же именем, но с другой подписью в производном классе

У меня есть функция с тем же именем, но с другой сигнатурой в базовом и производном классах. Когда я пытаюсь использовать функцию базового класса в другом классе, который наследуется от производного, я получаю сообщение об ошибке. См. Следующий код: class A { public: void foo(string s...

759
голосов
12ответов
317993 просмотров

std :: wstring VS std :: строка

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

4242
голосов
1ответов
2422666 просмотров

Полное руководство и список книг по C ++

Этот вопрос пытается собрать несколько жемчужин среди десятков плохих книг по C ++, которые публикуются каждый год. В отличие от многих других языков программирования, которые часто можно найти на ходу из учебных пособий в Интернете, немногие могут быстро освоить C ++ без изучения хорошо напи...

61
голосов
7ответов
38258 просмотров

Зачем нам на самом деле нужно частное или защищенное наследование в C ++?

В C ++ я не могу придумать случая, когда я хотел бы унаследовать частные / защищенные от базовый класс: class Base; class Derived1 : private Base; class Derived2 : protected Base; Это действительно полезно?

201
голосов
11ответов
66338 просмотров

О каких типах неопределенного поведения должен знать программист на C ++?

О каких типах неопределенного поведения должен знать программист на C ++? Скажите, например: a[i] = i++;