【问题标题】:passing a const char instead of a std::string as function argument传递 const char 而不是 std::string 作为函数参数
【发布时间】:2014-02-19 21:08:26
【问题描述】:

这是一个新手问题,但我不明白它是如何工作的。

假设我有下面这样的功能

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

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

foo("hi!");

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

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

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

【问题讨论】:

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


【解决方案1】:

这是因为编译器创建了一个临时字符串并传递给参数或函数吗?

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

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

std::string s = "foo";

【讨论】:

  • 它可以工作,因为构造函数没有被声明为显式。
  • 嗨 juanchopanza。非常感谢您的解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-27
  • 2020-07-11
  • 1970-01-01
  • 2020-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多