c++默认参数顺序的问题

vbnnnn 2016年12月02日提问
0

c++默认参数顺序为什么是自右往左?为什么不能从左往右呢?请问这是什么原因。

3个回答

0

自右往左 可以支持任意个参数

参数是要压栈的,栈 是先入后出,如果是从左往右压入栈中,要找到最左边的第一个参数就很麻烦~

0

压栈顺序和大端字节序和小端字节序一样,哪个都可以的。C语言默认选择从右往左,应该是因为栈是向下增长的,所以这样会使压入的参数内存排列正好和书写的顺序一致而已,调试看内存可能比较方便。不过实际代码访问都是栈指针+偏移的方式,所以对于机器来说没有特别意义。
能不能支持可变参数,主要是看是不是由调用者负责清除堆栈。比如__stdcall也是从右往左压栈,但是被调用者清除堆栈,所以不支持可变参数。
__pascal是模仿PASCAL语言从左往右压栈,VC已经不再支持了。

0

假设从左往右

int f(int a = 1, int b);

那你f(1)的1到底是传给了a还是b呢。。所以是不能从左往右的。。

撰写答案

SegmentFault

一起探索更多未知

下载 App