Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ std::string是如何管理这个技巧的?_C++_Pass By Reference_Stdstring_Pass By Const Reference - Fatal编程技术网

C++ std::string是如何管理这个技巧的?

C++ std::string是如何管理这个技巧的?,c++,pass-by-reference,stdstring,pass-by-const-reference,C++,Pass By Reference,Stdstring,Pass By Const Reference,我刚刚写了一个函数: void doSomeStuffWithTheString(const std::string& value) { ... std::string v = value; std::cout << value.c_str(); ... } 它是有效的。所以我认为,要想工作(使用const char*初始化std::string的隐式实例),必须通过value传递值,但在本例中是通过(const)引用传递的 当引用为const时,是否有可能从const c

我刚刚写了一个函数:

void doSomeStuffWithTheString(const std::string& value) {
...
std::string v = value;
std::cout << value.c_str();
...
}
它是有效的。所以我认为,要想工作(使用const char*初始化std::string的隐式实例),必须通过value传递值,但在本例中是通过(const)引用传递的

当引用为const时,是否有可能从const char*实例化一个隐式时间std::string?如果没有,那么这怎么可能起作用呢

编辑

如果函数重载了

void doSomeStuffWithTheString(const char* value);

哪一个将选择编译器?

是的,一个临时的
std::string
是从字符串文本构造的。

std::string类型有一个从
const char*
的隐式转换(通过构造函数)。这就是允许字符串literal
“foo”
转换为
std::string
的原因。这将产生一个临时值。在C++中,将一个代码> const和< />代码作为一个临时值是合法的,因此这一切都是一致的。 <>可以用C++中的自定义类型复制这个技巧。

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

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

Method("foo");

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

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


有一个C++特征,可以传递一个临时值(在这种情况下,临时的代码< STD::String 隐式转换为<代码> const char */COD>)到const引用(在这种情况下,代码> const STD::String和)类型。

您几乎回答了您自己的问题:)有趣的,我不知道。一个对象需要什么才能在constby-ref调用上产生这样的隐式构造函数(以及如何避免它?)程序格式错误:
std::string=value无效,编译器应拒绝它。@lurscher:有关如何避免它,请参阅
explicit
关键字。”。但是,您只能在编写的类上防止隐式转换,因此我不知道是否有方法可以防止
const char*
=>
std::string
隐式转换。
class Example {
public:
  Example(const char* pValue) {}
};

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

Method("foo");