【发布时间】:2012-02-18 20:42:11
【问题描述】:
我刚刚写了一个函数:
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* 实例化隐式时间 std::string?如果没有,那么这可能如何工作?
编辑
如果函数被重载了会发生什么
void doSomeStuffWithTheString(const char* value);
哪一个会选择编译器?
【问题讨论】:
-
你几乎回答了你自己的问题:)
-
有趣,不知道。一个对象需要什么,所以在 const-by-ref 调用上会发生这样的隐式构造函数(以及如何避免它?)
-
程序格式错误:
std::string = value;无效,应该被编译器拒绝。 -
@lurscher:有关如何避免它,请参阅
explicit关键字。但是,您只能阻止您编写的类的隐式转换,所以我不知道是否有办法阻止const char *=>std::string隐式转换。
标签: c++ pass-by-reference stdstring pass-by-const-reference