传递const char而不是std :: string作为函数参数

时间:2014-01-28 14:08:05

标签: c++ parameter-passing pass-by-reference

这是一个新手问题,但我无法理解它是如何运作的。

假设我有类似下面的功能

void foo(const std::string& v) {
    cout << v << endl;
}

以下是我程序中的电话。

foo("hi!");

基本上我将const char*传递给一个函数参数,该参数是对字符串的const引用,所以我对这个调用有疑问。

为了通过引用传递参数,我是否正确地说变量必须至少在调用期间存在?如果是这样,在哪里创建传递给函数的字符串?

我可以看到它有效:它是否会发生,因为编译器会创建一个传递给参数或函数的临时string

1 个答案:

答案 0 :(得分:19)

  

是否会发生这种情况,因为编译器会创建一个传递给参数或函数的临时字符串?

是的,并且临时允许绑定到const左值引用。临时字符串v在函数调用期间处于活动状态。

请注意,这是可能的,因为std::string具有带const char*参数的隐式转换构造函数。使这成为可能的是相同的构造函数:

std::string s = "foo";