84669인 학습
152542인 학습
20005인 학습
5487인 학습
7821인 학습
359900인 학습
3350인 학습
180660인 학습
48569인 학습
18603인 학습
40936인 학습
1549인 학습
1183인 학습
32909인 학습
c++默认参数顺序为什么是自右往左?为什么不能从左往右呢?请问这是什么原因。
学习是最好的投资!
自右往左 可以支持任意个参数
参数是要压栈的,栈 是先入后出,如果是从左往右压入栈中,要找到最左边的第一个参数就很麻烦~
压栈顺序和大端字节序和小端字节序一样,哪个都可以的。C语言默认选择从右往左,应该是因为栈是向下增长的,所以这样会使压入的参数内存排列正好和书写的顺序一致而已,调试看内存可能比较方便。不过实际代码访问都是栈指针+偏移的方式,所以对于机器来说没有特别意义。能不能支持可变参数,主要是看是不是由调用者负责清除堆栈。比如__stdcall也是从右往左压栈,但是被调用者清除堆栈,所以不支持可变参数。__pascal是模仿PASCAL语言从左往右压栈,VC已经不再支持了。
假设从左往右
int f(int a = 1, int b);
那你f(1)的1到底是传给了a还是b呢。。所以是不能从左往右的。。
自右往左 可以支持任意个参数
参数是要压栈的,栈 是先入后出,如果是从左往右压入栈中,要找到最左边的第一个参数就很麻烦~
压栈顺序和大端字节序和小端字节序一样,哪个都可以的。C语言默认选择从右往左,应该是因为栈是向下增长的,所以这样会使压入的参数内存排列正好和书写的顺序一致而已,调试看内存可能比较方便。不过实际代码访问都是栈指针+偏移的方式,所以对于机器来说没有特别意义。
能不能支持可变参数,主要是看是不是由调用者负责清除堆栈。比如__stdcall也是从右往左压栈,但是被调用者清除堆栈,所以不支持可变参数。
__pascal是模仿PASCAL语言从左往右压栈,VC已经不再支持了。
假设从左往右
那你f(1)的1到底是传给了a还是b呢。。所以是不能从左往右的。。