编译器可以将对常量参数的引用优化为常量值吗?

时间:2010-10-13 12:08:41

标签: c++ optimization function parameters reference

考虑以下功能:

void func(const char & input){
 //do something
}

显然,参数不是常量值是有意义的 引用关于char类型大小的常量,现在可以编译器将其优化为常量 价值,以便它会跟随?

void func(const char input){
 //do something
}

3 个答案:

答案 0 :(得分:5)

没有。这不等同。在第一种情况下,输入仍然可以改变,例如,如果它是对另一个线程修改的变量的引用。

答案 1 :(得分:2)

就像有人说的那样,但是很遗憾地被投票(不确定他为什么删除了他的答案),只要可观察的行为与没有做任何不同的行为相同,编译器就可以做任何事情。

如果你的函数写入引用,并且全局变量作为参数传递给函数,并且函数返回后全局稍后打印,或者其他任何花哨的东西都被打印出来,那么它是自扩展的,那么如果编译器会更改参数传递约定,编译器更难以证明您仍然获得相同的可观察行为。如果编译器无法证明它,则无法进行所需的优化。

所以无论出现什么进一步的问题,只要想想“只要我不注意它就可以做任何事情。”

答案 2 :(得分:1)

如上所述,不是一般的。但编译器可以做的是内联整个函数调用。如果提供的参数是编译时常量,它可以进行许多有趣的优化。