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

Abr*_*ile 13 c++ parameter-passing pass-by-reference

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

假设我有类似下面的功能

void foo(const std::string& v) {
    cout << v << endl;
}
Run Code Online (Sandbox Code Playgroud)

以及我程序中的以下调用.

foo("hi!");
Run Code Online (Sandbox Code Playgroud)

本质上我传递的const char*是一个函数参数,它是一个字符串的const引用,所以我对这个调用有疑问.

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

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

jua*_*nza 19

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

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

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

std::string s = "foo";
Run Code Online (Sandbox Code Playgroud)

  • 它的工作原理是因为构造函数未声明为显式. (4认同)