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

passing a const char instead of a std::string as function argument

本文关键字:string 函数 参数 std char const 传递      更新时间:2023-10-16

这是一个新手问题,但我无法理解它的工作方式。

假设我具有下面的功能

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

和下面的我的程序中的呼叫。

foo("hi!");

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

为了通过参考通过一个参数,我是否有权说该变量至少在呼叫期间必须存在?如果是这样,在哪里创建了传递给函数的字符串?

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

是因为编译器创建传递给参数或函数的临时字符串?

是否发生了?

是的,允许临时性绑定到const LVALUE参考。临时字符串v在函数调用的持续时间内还活着。

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

std::string s = "foo";