以下是在C++ 11中初始化变量的两种方法:
T a {something};
T a = {something};
Run Code Online (Sandbox Code Playgroud)
我在所有可以想到的场景中测试了这两个,但我没有发现差异.这个答案表明两者之间存在细微差别:
对于变量,我在这些
T t = { init };或T t { init };样式之间没有太多关注,我发现差异很小,最坏的情况只会导致有关滥用显式构造函数的有用的编译器消息.
那么,两者之间有什么区别吗?
在C++ 03中,不可能通过值返回具有私有非定义复制构造函数的类的对象:
struct A { A(int x) { ... } private: A(A const&); };
A f() {
return A(10); // error!
return 10; // error too!
}
Run Code Online (Sandbox Code Playgroud)
我想知道,这个限制是否在C++ 11中解除了,是否可以编写具有类类型返回类型的函数,而没有用于复制或移动的构造函数?我记得允许函数的调用者使用新返回的对象可能很有用,但是他们无法复制值并将其存储在某处.