函数参数是否保证在堆栈上传递?

Hug*_*urd 0 c++ undefined-behavior language-lawyer

假设函数参数将在堆栈上顺序传递是否安全?

例如,无论编译器设置如何,都foo保证输出x y z

void foo(int x, int y, int z) {
    int *vector = &x;
    for(int i = 0; i < 3; i++) {
        std::cout << vector[i] << " ";
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用visual studio并且它确实有效,但我不确定这种行为是否得到保证.

Ker*_* SB 7

无论编译器设置如何,程序都有未定义的行为.

你可以把&x作为阵列的所述第一元素的地址一个 int,并因此vector[1]vector[2]是外的结合的数组访问.


jus*_*tin 5

该语言不能保证.参数通常在堆栈和寄存器中传递,或者是组合.这取决于ABI和调用约定.