-
国王好!🫡
以上代码在gcc编译器的结果为:
在clang编译器的结果为:
可以看出实际都是返回一个 |
Beta Was this translation helpful? Give feedback.
Answered by
Mq-b
Dec 27, 2024
Replies: 1 comment 1 reply
-
求值任何表达式的任何部分,包括求值函数参数的顺序都未指明(一些例外在下文中列出)。编译器能以任何顺序求值任何操作数和其他子表达式,并且可以在再次求值同一表达式时选择另一顺序。 #include <cstdio>
int a() { return [std::puts](http://zh.cppreference.com/w/cpp/io/c/puts)("a"); }
int b() { return [std::puts](http://zh.cppreference.com/w/cpp/io/c/puts)("b"); }
int c() { return [std::puts](http://zh.cppreference.com/w/cpp/io/c/puts)("c"); }
void z(int, int, int) {}
int main()
{
z(a(), b(), c()); // 允许全部 6 种输出排列
return a() + b() + c(); // 允许全部 6 种输出排列
} |
Beta Was this translation helpful? Give feedback.
1 reply
Answer selected by
Mq-b
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
std::make_tuple( process(Args{}) ... )
不是折叠表达式。求值任何表达式的任何部分,包括求值函数参数的顺序都未指明(一些例外在下文中列出)。编译器能以任何顺序求值任何操作数和其他子表达式,并且可以在再次求值同一表达式时选择另一顺序。
https://zh.cppreference.com/w/cpp/language/eval_order