Описание тега copy-initialization

Инициализирует объект из другого объекта
1 ответ

Концептуально ли инициализация списка копирования вызывает copy ctor?

До C++11 мы можем выполнить инициализацию копирования, написав что-то вроде A a = 1; что более или менее эквивалентно A a = A(1);, То есть сначала создается временный объект, а затем вызывается копия ctor. Независимо от исключения копирования, это д…
1 ответ

Почему инициализация копирования такая, какая она есть? Зачем нужен конструктор копирования?

Возможный дубликат: Какова причина того, что копирование и прямая инициализация ведут себя по-разному? И под инициализацией копирования я имею в виду так: struct MyStruct { MyStruct(int) {} MyStruct(const MyStruct&) {} }; MyStruct s = 5; // need…
04 дек '12 в 04:18
1 ответ

Почему я не могу скопировать-инициализировать поток строк из строки?

Следующий код не работает в GCC, Clang и Visual Studio: #include <string> #include <sstream> int main() { std::string s = "hello"; // ok, copy-initialization std::stringstream ss1(s); // ok, direct-initialization std::stringstream ss2 = …
15 окт '13 в 22:30
0 ответов

Почему мы различаем между копией и прямой инициализацией?

У меня есть следующие вопросы, и я надеюсь, что вы можете мне помочь. Код: A a; //A(void) is called A b(a); //A(const A&) is called: direct-initialization A c = a; //A(const A&) is called: copy-initialization Почему мы различаем эти инициали…
2 ответа

Инициализация копирования C++ + неявный вызов конструктора = ошибка

Этот код: class foo { int x; public: foo(int x) : x(x) { } int get() const { return x; } //... }; class bar { int x; public: bar(const foo& x) : x(x.get()) { } int get() const { return x; } bar& operator =(const foo& rhs) { x = rhs.get()…
1 ответ

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

Следующая цитата из моей книги C++: Когда мы используем прямую инициализацию, мы просим компилятор использовать обычную функцию сопоставления, чтобы выбрать конструктор, который лучше всего соответствует аргументам, которые мы предоставляем. Когда м…
2 ответа

Нет соответствующей функции в классе шаблона

При попытке скомпилировать этот код на моем компиляторе mingw32 я не получаю соответствующую функцию-член #include <iostream> using std::cout; template <class T> class Pattern { public: Pattern(): element(){ cout<< "default c-tor";…
2 ответа

Явные и неявные конструкторы

class Test { public: Test(int i) { cout<<"constructor called\n";} Test(const Test& t) { cout<<" copy constructor called\n";} }; class Test1 { public: Test1(int i) { cout<<"constructor called\n";} explicit Test1(const Test1&…
1 ответ

Почему оператор преобразования не вызывается при использовании синтаксиса инициализации, и почему сообщение об ошибке clang кажется неправильным?

У меня есть следующий код, который создает один объект t2 с помощью явного конструктора преобразования, который выполняет неявное преобразование t1. Это ожидается и описано в языке программирования C++, в разделе 11.4.1 третьего издания. #include &l…
2 ответа

Скопировать конструктор / оператор присваивания путаницы при инициализации объекта

В чем разница между этим: class_name object_name = something; а также class_name object_name(something); Из того, что я здесь прочитал, оба используют конструктор копирования, но я не понимаю, почему это происходит и как в игру вступают неявные прео…
1 ответ

Ослабление требований инициализации копирования в C++17

Я смущен заявлениями cppref: [...] Результат преобразования, который является выражением prvalue (начиная с C++17), если использовался конструктор преобразования, затем используется для прямой инициализации объекта. Последний шаг обычно оптимизирует…
1 ответ

Чтобы уточнить мои идеи, чтобы скопировать инициализацию и прямую инициализацию

Определите класс следующим образом: class A { public: A(): s("") {} //default constructor A(const char* pStr): s(pStr) {} //constructor with parameter A(const A& a) : s(a.s) {} //copy constructor ~A() {} //destructor private: std::string s; }; К…
1 ответ

Использование метода цепочки в продолжении копирования конструктора / инициализации в одной декларации операторов в C++?

Как вы знаете, мы обычно используем возврат по ссылке для цепочки методов, я использую возврат по ссылке в первом коде, а результат - как я и предсказывал. Во втором блоке кода, когда я не использовал возврат по ссылке, цепочка была разорвана, и ожи…
1 ответ

Какие из этих преобразований должны быть неоднозначными?

У меня есть код, подобный следующему: class bar; class foo { public: operator bar() const; }; class bar { public: bar(const foo& foo); }; void baz() { foo f; bar b = f; // [1] const foo f2; bar b2 = f2; // [2] } GCC выдает ошибку в [2], но не [1…
1 ответ

Это не инициализация копирования, или это так?

В следующем коде мне не разрешено объявлять явный ctor, потому что компилятор говорит, что я использую его в контексте инициализации копирования (clang 3.3 и gcc 4.8). Я пытаюсь доказать неправоту компиляторов, сделав ctor неявным, а затем объявив к…
1 ответ

Привязка ссылок через оператор неоднозначного преобразования

#include <iostream> using namespace std; struct CL2 { CL2(){} CL2(const CL2&){} }; CL2 cl2; struct CL1 { CL1(){} operator CL2&(){cout<<"operator CL2&"; return cl2;} operator const CL2&(){cout<<"operator const CL2&am…
2 ответа

Инициализация копирования: почему конструктор перемещения или копирования не вызывался, даже если отключено копирование?

У меня другой вопрос, потому что я могу знать, что такое копирование. Я учусь инициализации копии. Тем не менее, следующий код смутил меня, потому что я уже отключил копирование с помощью -fno-elide-contructors -O0 вариант. #include <iostream>…
6 ответов

Странное поведение инициализации копирования, не вызывает конструктор копирования!

Я читал разницу между прямой инициализацией и инициализацией копирования (§8.5/12): T x(a); //direct-initialization T y = a; //copy-initialization Что я понял из чтения об инициализации копирования, так это о том, что для этого нужен доступный и нея…
2 ответа

Скопируйте инициализацию формы '= {}'

Учитывая следующее: #include <stdio.h> class X; class Y { public: Y() { printf(" 1\n"); } // 1 // operator X(); // 2 }; class X { public: X(int) {} X(const Y& rhs) { printf(" 3\n"); } // 3 X(Y&& rhs) { printf(" 4\n"); } // 4 }; // …
2 ответа

C++(11): когда использовать прямую или копировать инициализацию, если оба в порядке

До того, как начнутся крики о дублировании: я знаю, что следующий вопрос (и некоторые другие) довольно тесно связаны с этим: Есть ли разница в C++ между инициализацией копирования и прямой инициализацией? Ответы на этот вопрос прекрасно объясняют сц…
25 фев '13 в 12:38