gpt4 book ai didi

c++ - 当对象没有数据成员时,统一初始化复制失败

转载 作者:可可西里 更新时间:2023-11-01 16:37:36 24 4
gpt4 key购买 nike

在更新一些代码以使用统一初始化时,我认为这将是现在“旧式”括号样式的现代替代品。我知道情况并非总是如此(明显的例子,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
};

我不明白为什么这些应该有所作为。

最佳答案

这是一个已知错误,有望在 C++17 中修复(不适用于 C++14,请参阅 http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#1467)。您的结构是一个聚合,因此要使用 {someElement} 对其进行初始化,正如您所发现的那样,至少需要一个数据成员。尝试提供一个 operator int();,您将看到它可以编译。

关于c++ - 当对象没有数据成员时,统一初始化复制失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21340801/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com