我知道第一个应该发送对内存中某个值的引用,该值不会被foo()
修改
,第二个应该传递值的新副本,然后
如果我有这样的程序
#include <iostream>
void foo ( const int& var ) {...}
int main ( void )
{
foo ( 3 );
return 0;
}
编译器不应该说“ 3不是对int变量的引用”吗?
我认为使用对已在内存中的变量的引用会更有效(使用更少的空间),但是我希望它会引发错误或警告,除非是这样的情况
...
int main ( void )
{
int my_var = 3;
foo ( my_var );
return 0;
}
因为第一个版本传递的是值,而不是引用(即使引用不是要修改引用值)
是否正在进行某种编译器优化? 那是C ++标准中的某个地方吗? (如果是,是哪一个?我使用了C ++ 11,并且知道较新的版本引入了一些有用的抽象,但是我想我不需要使用其中的任何抽象)