函数执行顺序-cpp
Function execution order - cpp
以下代码
void function(char* p1, char* p2)
{
// [...]
return;
}
char* print(char* msg)
{
printf("%sn", msg);
return msg;
}
function(print("first"), print("second"));
输出如下:第二第一个
我很好奇为什么它从右到左执行功能。
C++标准,函数调用(5.2.2./4)说:
当调用函数时,每个参数都应使用其相应的参数进行初始化。[注释:此类初始化彼此之间的顺序不确定--结束注释]
对于这段代码,您的编译器选择按从右到左的顺序初始化参数。如果使用不同的代码,甚至是相同的代码,编译器可能会做出不同的选择。订单只是标准中未指定的,您不能依赖它。
如果希望强制执行特定的顺序,则必须显式地对这些函数调用进行排序。
这个问题是因为函数使用了堆栈内存。
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
。
有关更多信息,请参阅链接。
希望这将帮助您理解
相关文章:
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- Linux的Cpp上的计时器
- CMake-按正确顺序将项目与C运行时对象文件链接
- 函数调用中参数的顺序重要吗
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- 命名空间中具有.h和.cpp文件的类
- 内置函数可查看CPP中的成员变量
- 为什么不;名字在地图上是按顺序排列的吗
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- Cpp-Tuple使用带有变量的get
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- CPP 继承虚拟方法解析顺序
- YAML-CPP的顺序返回数据
- 用错误的标志顺序编译后,是否删除*.cpp文件
- 对象创建顺序,cpp
- c++标准和C语言在哪里说的是一样的:编译单元(.cpp文件)中的变量是按照声明的顺序初始化的
- 发生分段错误取决于gcc compile命令中的cpp顺序
- 如何在yaml cpp中保持插入顺序
- 函数执行顺序-cpp