可能的重复:
什么时候应该使用直接初始化,什么时候应该使用复制初始化? https://stackoverflow.com/questions/4293596/when-should-you-use-direct-initialization-and-when-copy-initialization
我知道两者
int a = 1;
and
int a(1);
使用 C++ 工作,但哪一个被认为更好用?
For int
没有什么区别。这int a = 1;
语法是复制初始化, while int a(1);
is 直接初始化。即使对于一般类类型,编译器也几乎可以保证生成相同的代码,但复制初始化要求类not有一个声明的复制构造函数explicit
.
为了说明这一点,直接初始化直接调用相应的构造函数:
T x(arg);
另一方面,复制初始化的行为“就像”制作了一个副本:
T x = arg; // "as if" T x(T(arg));, but implicitly so
复制省略是明确允许和鼓励的,但“好像”构造必须仍然有效,即复制构造函数必须可访问并且不显式或删除。一个例子:
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
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)