foo({0,0}):这是使用初始化列表吗?

时间:2014-11-18 15:29:41

标签: c++ c++11 syntax initializer-list

如果没有在施工现场命名Vec类型,此代码如何允许调用foo?这种语法是C ++ 11初始化列表的一种情况吗?

struct Vec {
    Vec(int x, int y) {
    }
};
void foo(Vec) {
}
int main() {
    foo({0, 0}); // normally I'd pass Vec(0, 0) or Vec{0, 0}
}

我确定这是一个重复的问题,但我不知道该搜索什么。

1 个答案:

答案 0 :(得分:4)

如Piotr S.所述,这是copy list initialization braced-init-list 用于初始化函数参数。在复制列表初始化中,仅考虑非显式构造函数。这意味着,如果Vec::Vec(int, int)是显式的,{0, 0}会导致编译器错误,并且需要Vec{0, 0}