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

Myr*_*ria 5 c++ this parameter-passing

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

#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());
}
Run Code Online (Sandbox Code Playgroud)

然而,这是否也适用于评价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());
}
Run Code Online (Sandbox Code Playgroud)

Bri*_*ian 5

Struct().Member(Function())
Run Code Online (Sandbox Code Playgroud)

这是一个函数调用,其中postfix-expressionStruct().Member,参数是Function().通常,在函数调用中,对于参数的评估,后缀表达式的评估是无效的.

因此,puts调用的顺序确实未指定.

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