【发布时间】:2011-09-10 21:48:01
【问题描述】:
我在为 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; }
};
运行时,不会打印任何消息。但是,如果我将移动构造函数设为私有,编译器会报错‘Goo::Goo(Goo&&)’ is private,尽管显然不需要移动构造函数。
有谁知道对于像这样的聚合初始化是否可以访问移动构造函数的标准要求?
【问题讨论】:
标签: c++ gcc c++11 initialization