foo({0, 0}):这是使用初始值设定项列表吗?

foo({0, 0}): Is this using initializer lists?

本文关键字:列表 foo      更新时间:2023-10-16

这段代码如何允许在施工现场调用foo而不命名Vec类型?此语法是否属于 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}
}

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

正如 Piotr S. 所说,这是复制列表初始化。大括号初始化列表用于初始化函数参数。在复制列表初始化中,仅考虑非显式构造函数。这意味着,如果Vec::Vec(int, int)是显式的,{0, 0}将导致编译器错误,并且需要Vec{0, 0}