当一个函数返回结构或者对象时,调用所产生的临时对象所占用的内存位于调用者的栈上,这块临时内存的地址通过一个隐含参数传递给被调函数(类似调用成员函数时this指针的传递),过程类似下面的代码:
std::string f() { return std::string("hello"); } int main() { std::string str_temp; f(&str_temp); const std::string& str = str_temp; ... return 0; }因为这个临时对象位于调用者的栈上,当从被调函数返回时,这块内存是仍然有效的,所以C++标准允许使用一个常量引用去使用这块内存。如果使用微软的VC++的话,const可以去掉,编译器会给出一个代码不符合标准的警告,但是可以正常运行,因为这块位于栈上的临时对象其实是可以被修改的。 这个题的意义在于大部分C++程序员都会给出错误答案,这到底是知识点还是盲点估计不同的人会给出不同的解释。