gpt4 book ai didi

c++ - 使用私有(private)复制/移动构造函数进行聚合初始化

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:25:17 24 4
gpt4 key购买 nike

我在为 another question 测试一些东西时遇到了这个问题关于初始化聚合。我正在使用 GCC 4.6。

当我用列表初始化聚合时,所有成员都在适当的位置构建,无需复制或移动。即:

int main()
{
std::array<std::array<Goo,2>,2>
a { std::array<Goo,2>{Goo{ 1, 2}, Goo{ 3, 4}} ,
std::array<Goo,2>{Goo{-1,-2}, Goo{-3,-4}} };
}

让我们通过一些嘈杂的构造函数来确认:

struct Goo
{
Goo(int, int) { }
Goo(Goo &&) { std::cout << "Goo Moved." << std::endl; }
Goo(const Goo &) { std::cout << "Goo Copied." << std::endl; }
};

运行时,不会打印任何消息。但是,如果我将移动构造函数设为私有(private),编译器会提示 'Goo::Goo(Goo&&)' is private,尽管显然不需要移动构造函数。

有谁知道对于这样的聚合初始化是否存在移动构造函数可访问的标准要求?

最佳答案

不调用复制或移动构造函数是标准特别允许的优化(但不是必需的)。

为了在编译器之间保持一致,实现必须检查是否可以调用构造函数,如果它不关心优化的话。

关于c++ - 使用私有(private)复制/移动构造函数进行聚合初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6279779/

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