Orc*_*ris 4 c++ constructor initialization
可能重复:
何时应该使用直接初始化和复制初始化?
我知道两者
int a = 1;
Run Code Online (Sandbox Code Playgroud)
和
int a(1);
Run Code Online (Sandbox Code Playgroud)
在C++中工作,但哪一个被认为更好用?
Ker*_* SB 11
因为int没有区别.该int a = 1;语法是复制initialziation,同时int a(1);是直接初始化.即使对于通用类类型,编译器也几乎可以保证生成相同的代码,但是复制初始化要求类没有声明的复制构造函数explicit.
为了解释这一点,直接初始化直接调用相应的构造函数:
T x(arg);
Run Code Online (Sandbox Code Playgroud)
另一方面,复制初始化表现为"好像"一个副本:
T x = arg; // "as if" T x(T(arg));, but implicitly so
Run Code Online (Sandbox Code Playgroud)
明确允许并鼓励复制省略,但"仿佛"构造必须仍然有效,即复制构造函数必须是可访问的,而不是显式的或删除的.一个例子:
struct T
{
T(int) { } // one-argument constructor needed for `T x = 1;` syntax
// T(T const &) = delete; // Error: deleted copy constructor
// explicit T(T const &) = default; // Error: explicit copy constructor
// private: T(T const &) = default; // Error: inaccessible copy constructor
};
Run Code Online (Sandbox Code Playgroud)