搜索

首页  >  问答  >  正文

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

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

PHPzPHPz2803 天前570

全部回复(3)我来回复

  • 高洛峰

    高洛峰2017-04-17 15:00:48

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

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

    回复
    0
  • PHP中文网

    PHP中文网2017-04-17 15:00:48

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

    回复
    0
  • 迷茫

    迷茫2017-04-17 15:00:48

    假设从左往右

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

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

    回复
    0
  • 取消回复