. int Function1() { std::puts("Function1"); return 1; } int Function2() { s-6ren">
gpt4 book ai didi

c++ - 函数调用的 "this"的评估是否以相对于参数的未指定顺序进行?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:28:55 25 4
gpt4 key购买 nike

众所周知(虽然不够广泛 >.<),C 和 C++ 不指定函数参数的计算顺序。也就是说,下面的两个 puts() 可以任意顺序出现,作为任意编译器选择:

#include <cstdio>

int Function1() {
std::puts("Function1");
return 1;
}

int Function2() {
std::puts("Function2");
return 2;
}

int Add(int x, int y) {
return x + y;
}

int main() {
return Add(Function1(), Function2());
}

但是,这是否也适用于 . 左侧的 this 的求值,.*->->* 运算符?换句话说,puts() 下面的 也是 未指定的顺序吗?

#include <cstdio>

struct Struct {
Struct() { std::puts("Struct::Struct"); }
int Member(int x) const { return x * 2; }
};

int Function() {
std::puts("Function");
return 14;
}

int main() {
return Struct().Member(Function());
}

最佳答案

Struct().Member(Function())

这是一个函数调用,其中 postfix-expressionStruct().Member 并且参数是 Function()。通常,在函数调用中,后缀表达式 的计算相对于参数的计算是无序的。

因此 puts 调用的顺序确实是未指定的。

函数是非静态成员函数完全无关紧要。

关于c++ - 函数调用的 "this"的评估是否以相对于参数的未指定顺序进行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31621326/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com