【发布时间】:2016-08-30 23:10:31
【问题描述】:
我想知道以下情况:
void f(int a, int b) { }
int a(int x) { std::cout << "func a" << std::endl; return 1; }
int b(int x) { std::cout << "func b" << std::endl; return 2; }
int x() { std::cout << "func x" << std::endl; return 3; }
int y() { std::cout << "func y" << std::endl; return 4; }
f(a(x()), b(y()));
阅读http://en.cppreference.com/w/cpp/language/eval_order后,我仍然难以理解以下评估顺序是否可行:
x() -> y() -> a() -> b()
或者标准保证a(x()) 和b(y()) 将被评估为单位,可以这么说。
换句话说,有没有可能打印出来
func x
func y
func a
func b
在 GCC 5.4.0 上运行这个测试让我觉得更合乎逻辑
func y
func b
func x
func a
但这当然没有告诉我标准要求什么。如果能获得对该标准的参考,那就太好了。
【问题讨论】:
-
我继续为您的问题提供了更具描述性的标题。如果您对此有任何问题,请随时更改它。
-
感谢 chris 和 panta rei 的帮助编辑。
-
函数arguments的求值与函数的求值无关。关于“作为一个单元进行评估”的部分仅指对函数的评估 -
a(...)和b(...)的评估不会交错。
标签: c++