这个c++ 0x优化合法吗?

Is this C++0x optimization legal?

本文关键字:优化 c++ 0x 这个      更新时间:2023-10-16

c++编译器对

进行优化是否合法?
int func(int&& a){
    a = 3;
    return a;
}

int func(int&& a){
    return 3;
}

?(或其他POD)

不像本身,因为函数必须修改变量a使其相等。也就是说,在内联和一些琐碎的优化之后,结果将是相同的:

int x = func(5);
// pseudo-inlined:
int __temp = 5; // the temporary created by binding 5 to int&&
__temp = 3; // a = 3;
int x = __temp; // return a;
// constant propagation:
int __temp = 5;
__temp = 3;
int x = 3;
// dead-code elimination:
int x = 3;

注意,如果您使用func和内联的第二个定义,结果是相同的,只是因为没有使用临时变量。这表明这两个函数通常不相等:

int modifyme = 100;
int x = func(std::move(modifyme));
// modifyme must be 3, second function definition wouldn't do that