Описание тега ctor-initializer

Constructor initializer list. In C++, the initializer list is the place where initialization of the object should occur. Is where the constructors for base classes and members are called. Members are initialized in the same order as they are declared, not as they appear in the initializer list.
4 ответа

Бросить исключение из инициализатора конструктора

Каков наилучший способ вызвать исключение из инициализатора конструктора? Например: class C { T0 t0; // can be either valid or invalid, but does not throw directly T1 t1; // heavy object, do not construct if t0 is invalid, by throwing before C(int n…
20 апр '10 в 03:45
2 ответа

Конструктор с пустым списком mem-initializer-list и пустым телом

Где я могу найти в Стандарте (C++14) предложение о том, что определяемый пользователем конструктор по умолчанию с пустым списком mem-initializer-list и пустым телом вызывает конструктор по умолчанию для каждого базового класса и для каждого дочернег…
7 ответов

Продлевает ли член класса Const Reference временный срок?

Почему это: #include <string> #include <iostream> using namespace std; class Sandbox { public: Sandbox(const string& n) : member(n) {} const string& member; }; int main() { Sandbox sandbox(string("four")); cout << "The answ…
1 ответ

Инициализация члена при использовании делегированного конструктора

Я начал опробовать стандарт C++11 и нашел этот вопрос, который описывает, как вызывать ваш ctor из другого ctor в том же классе, чтобы избежать использования метода init или чего-либо подобного. Теперь я пытаюсь сделать то же самое с кодом, который …
30 авг '12 в 04:46
3 ответа

Почему виртуальные базовые конструкторы, отличные от заданных по умолчанию, не вызываются, если большинство производных баз явно не вызывает их?

Я хотел бы понять, почему стандарт CY C++ требует, чтобы виртуальные базовые конструкторы, отличные от заданных по умолчанию, не могли быть вызваны промежуточным классом, не являющимся наиболее производным, как в этом коде, при компиляции с помощью …
2 ответа

Указатель 'this' в списке инициализации конструктора

Я думаю, я не могу понять, почему это не работает. Я всегда думал, что могу использовать указатель this в конструкторе, но я никогда не знал, что не могу использовать this в списке инициализации. #include <iostream> class A { public: int a; in…
2 ответа

C++ Объясните конструктор "один вкладыш", который перегружает функцию-член Iterator(int i = 0): i(i) { };

У меня есть вопрос о том, что на самом деле делает этот подрядчик. Я нашел его в Интернете, и он работает для моих целей, но я хочу понять его обозначения. class Iterator { int i; public: Iterator(int i = 0) : i(i) {}; friend class SinglyLinkedList&…
03 ноя '14 в 21:30
2 ответа

Создает ли приращение в списке инициализатора члена неопределенное поведение?

Это вызывает неопределенное поведение? В частности, увеличение в списке инициализатора и как это будет оцениваться. class Wrinkle { public: Wrinkle(int i) : a(++i), b(++i), x(++i) {} private: int a; int x; int b; }; Различие в порядке между объявлен…
3 ответа

Что это за синтаксис?

Возможный дубликат: Что делает двоеточие после имени конструктора C++? Я нахожу этот синтаксис странным в C++ TagDetails::TagDetails(QWidget *parent) : QDialog(parent), ui(new Ui::TagDetails) Это объявление конструктора в C++... Что означает вещь по…
09 ноя '10 в 16:23
3 ответа

Заполнение std::array в инициализаторе конструктора класса

Есть ли способ заполнить std::array в инициализаторе конструктора класса? Прямо сейчас я заполняю это долгий путь: class Matrix3x3 { //... private: std::array<double, 9> _indicies; }; //... Matrix3x3::Matrix3x3(double m00, double m01, double m…
9 ответов

Что делает двоеточие после имени конструктора C++?

Что делает оператор двоеточия (":") в этом конструкторе? Это эквивалентно MyClass(m_classID = -1, m_userdata = 0);? class MyClass { public: MyClass() : m_classID(-1), m_userdata(0) { } int m_classID; void *m_userdata; };
1 ответ

C++ Многоуровневая проблема компиляции виртуального наследования

Я работаю над проектом C++, в котором я использую многоуровневое наследование. Это мой пример кода: class ClassA { public: ClassA(int a,int b) : sum(a + b) {} virtual ~ClassA() = default; int sum; }; class ClassB : virtual public ClassA { public: Cl…
4 ответа

Как можно инициализировать поля класса?

Немного простой вопрос, но мне сложно найти окончательный ответ. Являются ли списки инициализатора единственным способом инициализации полей класса в C++, кроме присваивания в методах? В случае, если я использую неправильную терминологию, вот что я …
16 июл '10 в 12:01
3 ответа

C++: Какой конструктор вызывается первым?

Я смотрел на похожие вопросы, но, похоже, теряюсь. У меня есть простой пример, поэтому, пожалуйста, обратите внимание на следующее: #include <iostream> using namespace std; class Animal { public: Animal() {cout << "Animal" << endl;…
3 ответа

Правильная инициализация unique_ptr в конструкторе базового класса

Я пытаюсь передать std::unique_ptr в унаследованный класс, который будет перенаправлять его в конструктор базового класса (используя список инициализатора конструктора). Если конструктор базового класса получает nullptr объект по умолчанию должен бы…
1 ответ

Простой конструктор со списком инициализаторов?

Ниже я включил свой файл h, и моя проблема в том, что компилятору не нравятся конструкторы моего простого класса исключений со списками инициализаторов. Это также говорит о том, что string is undeclared identifierхотя у меня есть #include <string…
5 ответов

Список инициализаторов делает переменную неинициализированной?

У меня есть класс с единственным конструктором, как это: IntroScreen::IntroScreen(Game *game) : View(game), counter(0.0f), message(-1), continueAlpha(255), continueVisible(false), screenAlpha(255), fadeIn(false), fadeOut(false) { } И где-то в методе…
16 июл '10 в 15:54
3 ответа

Инициализация константных полей в конструкторе

Поля const в C++ должны быть инициализированы в списке инициализации, что делает нетривиальным вычисление взаимозависимых значений из параметров конструктора. Как лучше всего перевести, например, этот фрагмент кода Java на C++? public class SomeObje…
10 сен '14 в 17:51
3 ответа

Переменные после двоеточия в конструкторе

Я все еще изучаю C++ и пытаюсь понять это. Я просматривал некоторый код и увидел: point3(float X, float Y, float Z) : x(X), y(Y), z(Z) // <----- what is this used for { } Что означает "x(X), y(Y), z(Z)" рядом с параметрами конструктора?
28 фев '10 в 03:34
2 ответа

Избегайте двойного вызова функции при назначении строки в списке инициализатора ctor

В следующем примере кода я хочу инициализировать std::string A::str_ в Aсписок инициализатора с возвращаемым значением из функции (которая может возвращать NULL) или const char*, Но мне не нравится тот факт, что Func() называется дважды. #include &l…
06 апр '17 в 20:00