Это C ++ 0x оптимизация законна? - PullRequest
9 голосов
/ 23 августа 2011

Допустимо ли для компилятора C ++ 0x оптимизировать

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

до

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

? (или для другого POD)

1 Ответ

8 голосов
/ 23 августа 2011

Не так per se , потому что функция должна изменить переменную 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...