【发布时间】:2016-05-16 13:13:25
【问题描述】:
为什么首先调用函数g()?我将g() 定义为初始化列表中的第二个元素。
以下与初始化列表相关的标准引用是否相关?
§8.5.4.4:在花括号初始化列表的初始化列表中, 初始化子句,包括任何由包扩展产生的子句 (§14.5.3),按照它们出现的顺序进行评估。
#include <iostream>
#include <vector>
int f() { std::cout << "f"; return 0;}
int g() { std::cout << "g"; return 0;}
void h(std::vector<int> v) {}
int main() {
h({f(), g()});
}
输出:
gf
【问题讨论】:
-
您的代码不包含任何初始化列表。
-
C++ 中未指定函数参数的求值顺序。
-
所有评论和重复投票者请注意:OP 没有调用带有两个参数的函数,OP 正在调用带有 one 参数的函数,这是一个初始化的向量使用统一初始化和向量的
std::initializer_list构造函数。 -
你是运行了编辑帖子中的代码,还是这是之前版本的结果?
-
您使用的是哪个版本的 GCC?
标签: c++ gcc operator-precedence