【发布时间】:2014-02-19 21:08:26
【问题描述】:
这是一个新手问题,但我不明白它是如何工作的。
假设我有下面这样的功能
void foo(const std::string& v) {
cout << v << endl;
}
以及我程序中的以下调用。
foo("hi!");
基本上我将const char* 传递给一个函数参数,该参数是对字符串的常量引用,所以我对这个调用有疑问。
为了通过引用传递参数,我是否正确地说该变量必须至少在调用期间存在?如果是这样,传递给函数的字符串是在哪里创建的?
我可以看到它有效:它发生是因为编译器创建了一个临时的string 并传递给参数或函数吗?
【问题讨论】:
-
您的假设是正确的,它会创建一个临时的
std::string。另一种方法是使用string_view/string_ref,它可以同时保存const char*和std::string而无需复制(open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3849.html 或boost.org/doc/libs/1_55_0/libs/utility/doc/html/string_ref.html)
标签: c++ parameter-passing pass-by-reference