考虑以下最简单的例子:
#include <iostream>
struct X {
X() { std::cout << "Default-ctor" << std::endl; }
X(std::initializer_list<int> l) {
std::cout << "Ilist-ctor: " << l.size() << std::endl;
}
};
int main() {
X a{};
X b({}); // reads as construct from {}
X c{{}}; // reads as construct from {0}
X d{{{}}}; // reads as construct from what?
// X e{{{{}}}}; // fails as expected
}
关于a、b和c,我没有问题,一切都相当清楚
但我不明白为什么d会起作用
这个额外的大括号在d中代表什么?我查阅了C++20标准,但很难找到答案。clang和gcc都同意这段代码,所以是我自己错过了什么。
-fno-elide-constructors
运行它,没有调用任何构造函数。 - Kostas