std :: string如何管理这个技巧?

时间:2012-01-25 16:47:24

标签: c++ pass-by-reference stdstring pass-by-const-reference

我刚写了一个函数:

void doSomeStuffWithTheString(const std::string& value) {
...
std::string v = value;
std::cout << value.c_str();
...
}

然后我用

来称呼它
doSomeStuffWithTheString("foo");

它有效。所以我认为这个工作(const char *初始化std :: string的隐式实例)该值必须通过值传递,但在这种情况下通过(const)引用传递。

当引用为const时,是否存在从const char *实例化的隐式temporal std :: string?如果没有,那么这可能如何运作?

修改

如果函数重载

会发生什么
void doSomeStuffWithTheString(const char* value);

哪一个会选择编译器?

4 个答案:

答案 0 :(得分:7)

std::string类型具有来自const char*的隐式转换(通过构造函数)。这是允许字符串文字"foo"转换为std::string的原因。这导致临时值。在C ++中,将const &设置为临时值是合法的,因此这一切都保持在一起。

可以在C ++中使用自己的自定义类型复制这个技巧。

class Example {
public:
  Example(const char* pValue) {}
};

void Method(const Example& e) {
  ...
}

Method("foo");

答案 1 :(得分:0)

是的,临时std::string是从字符串文字构建的。

答案 2 :(得分:0)

确切地说,使用std::string默认构造函数

答案 3 :(得分:0)

“该值必须按值传递,但在这种情况下由(const)引用传递。”

有一个C ++特性,可以传递一个临时值(在这种情况下,从std::string隐式转换的临时const char *)到const-reference的参数(在这种情况下) ,const std::string &)类型。