C++ 函数执行顺序-cpp

C++ 函数执行顺序-cpp,c++,function,C++,Function,下面的代码 void function(char* p1, char* p2) { // [...] return; } char* print(char* msg) { printf("%s\n", msg); return msg; } function(print("first"), print("second")); 给出如下输出: 第二 首先 我很好奇为什么它从右到左执行函数。< /P> < P> C++标准,函数调用(5.2.2/4)< /强>,表示

下面的代码

void function(char* p1, char* p2)
{
    // [...]
    return;
}
char* print(char* msg)
{
    printf("%s\n", msg);
    return msg;
}
function(print("first"), print("second"));
给出如下输出: 第二 首先


我很好奇为什么它从右到左执行函数。< /P> < P> C++标准,<强>函数调用(5.2.2/4)< /强>,表示:

调用函数时,应使用相应的参数初始化每个参数。[注:此类初始化相互之间的顺序不确定-结束注]

对于这段代码,您的编译器选择按从右到左的顺序初始化参数。如果使用不同的代码,甚至是相同的代码,编译器可能会做出不同的选择。标准没有明确规定订单,您不能依赖它


如果希望强制执行特定的顺序,则必须显式地对这些函数调用排序。

此问题是由于函数使用的堆栈内存造成的

功能(打印(“第一”),打印(“第二”)

此功能的执行如下所示:

// 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()
因此,输出为
第二优先

有关更多信息,请参阅


希望这将有助于您理解

该标准没有规定参数评估的顺序,应由供应商实施该标准参见相关内容: