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

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

这段代码如何允许调用 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. 所述,这是 copy list initialization . braced-init-list 用于初始化函数参数。在复制列表初始化中,只考虑非显式构造函数。这意味着如果 Vec::Vec(int, int) 是显式的,{0, 0} 会导致编译器错误并且 Vec{0, 0} 将是必需的。

关于c++ - foo({0, 0}) : Is this using initializer lists?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26997932/

相关文章:

c++ - 我需要一个类似于堆栈但具有随机访问功能的数据结构,但是我应该实现什么?

c++ - 无法从 Windows xp x64 prof 中的用户帐户访问已安装过滤器驱动程序的重分析点目录

c++ - 如何编写可以迭代泛型类型的函数

java - Java 中的日期问题

ruby - 方法名称末尾的 "!"和 "?"的用途是什么?

c++ - 用于同时创建和播放音频的 Python 音频库

c++ - sf::String 类的成员恢复为空白

c++ - 防止 C++03 代码在 C++11 中表现不佳的好方法?

c++ - 如何使用非默认构造函数实例化模板类

Java:toString 的员工层次结构格式错误