以下代码
void function(char* p1, char* p2)
{
// [...]
return;
}
char* print(char* msg)
{
printf("%s\n", msg);
return msg;
}
function(print("first"), print("second"));
给出如下输出: 第二 第一
我很好奇为什么它从右到左执行功能。
答案 0 :(得分:1)
C ++标准,函数调用(5.2.2 / 4),说:
调用函数时,每个参数都应使用相应的参数进行初始化。 [注意:此类初始化相对于彼此不确定地排序 - 结束注释]
您的编译器为该段代码选择按从右到左的顺序初始化参数。提供不同的代码,甚至相同的代码,您的编译器可以做出不同的选择。订单根据标准没有明确规定,您不能依赖它。
如果您希望强制执行特定订单,则必须明确对这些函数调用进行排序。
答案 1 :(得分:-1)
此问题是由于函数使用的堆栈内存。
function(print("first"), print("second"));
此功能的执行如下:
// Push Operation
1. Call function()
2. Call print("First")
3. Call Print("Second")
// Pop Operation
4. Execute Print("Second")
5. Execute Print("First")
6. Execute function()
因此,输出为Second First
。
有关详细信息,请参阅Link。
希望这会帮助您理解