std::string是如何实现这一技巧的



我刚刚写了一个函数:

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

但我用称之为

doSomeStuffWithTheString("foo");

它是有效的。因此,我认为这是可行的(一个const char*来初始化std::string的隐式实例),值必须通过值传递,但在这种情况下是通过(const)引用传递的。

当引用为const时,是否有可能是从constchar*实例化的隐式时态std::字符串?如果没有,那么这怎么可能起作用呢?

编辑

如果使函数过载会发生什么

void doSomeStuffWithTheString(const char* value);

哪一个会选择编译器?

std::string类型具有从const char*的隐式转换(通过构造函数)。这就是允许字符串文字"foo"转换为std::string的原因。这将产生一个临时值。在C++中,将const &设为临时值是合法的,因此这一切都成立。

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

class Example {
public:
  Example(const char* pValue) {}
};
void Method(const Example& e) {
  ...
}
Method("foo");

是的,临时std::string是根据字符串文字构造的。

没错,使用std::string默认构造函数

"值必须通过值传递,但在这种情况下是通过(const)引用传递的。"

有一个C++特性,可以将临时值(在本例中,是从const char *隐式转换而来的临时std::string)传递给const-reference(在本案中,是const std::string &)类型的参数。

相关内容

  • 没有找到相关文章

最新更新