在更新一些代码以使用统一初始化时,我认为这将是现在“旧式”括号样式的现代替代品。我知道情况并非总是如此(明显的例子,vector<int>
),但我偶然发现了另一个我不理解的差异。
class Object {
public:
Object() = default;
Object(const Object&) = default;
};
int main() {
Object o;
Object copy{o}; // error
Object copy2(o); // OK
}
在clang3.5下编译失败,报错:(在gcc下也失败)
error: excess elements in struct initializer
有两个不同的变化可以Object
使这项工作。向它添加一个数据成员,或者给它一个空的复制构造函数主体
class Object {
private:
int i; // this fixes it
public:
Object() = default;
Object(const Object&) { } // and/or this fixes it as well
};
我不明白为什么这些应该有所作为。