结论:
-
const 引用因为能接受范围大,可以接受常量,所以被经常使用;
-
const 引用 被传入常量时,还是会在栈中构造一个匿名变量(临时变量)然后引用指向这个变量;
应用:
- 我们经常会将常量直接传入函数,(当函数形参为常量引用时候);如下面第二次的
func
调用 - 我本来以为直接传入常量,引用指向的空间是常量存在的静态区;
- 后来好奇看了一下发现不是;书上也明确有讲出会构造临时变量;
void func(const string& src)
{
cout << &src << endl;
}
int main() {
string str = "s1";
func(str);
func("sss");
return 0;
}
证明:-通过反汇编证明代码实现;
- 首先看用传参 - 局部变量
- 构造局部变量
- 传参的时候发现是引用,就没有构造;
- 再看直接传入常量的时候;
- 首先将常量拷贝到 局部的、栈区的临时变量中;
- 调用函数,传入临时变量;
- 函数退出,临时变量析构;
证明:- C++ primer 讲解
- 明确指出,如果传入了不是左值,就会创建临时变量;