这是一个新手问题,但我无法理解它是如何运作的。
假设我有类似下面的功能
void foo(const std::string& v) {
cout << v << endl;
}
以下是我程序中的电话。
foo("hi!");
基本上我将const char*
传递给一个函数参数,该参数是对字符串的const引用,所以我对这个调用有疑问。
为了通过引用传递参数,我是否正确地说变量必须至少在调用期间存在?如果是这样,在哪里创建传递给函数的字符串?
我可以看到它有效:它是否会发生,因为编译器会创建一个传递给参数或函数的临时string
?
答案 0 :(得分:19)
是否会发生这种情况,因为编译器会创建一个传递给参数或函数的临时字符串?
是的,并且临时允许绑定到const
左值引用。临时字符串v
在函数调用期间处于活动状态。
请注意,这是可能的,因为std::string
具有带const char*
参数的隐式转换构造函数。使这成为可能的是相同的构造函数:
std::string s = "foo";