std :: string声明的函数不会抱怨返回char*

San*_*mar 1 c++ string

这不是我的计划,所以不要开始指责我:-).我得到了一些随机程序.MyFunc()返回一个全局声明的缓冲区.我使用VS2008并没有抱怨

static char buffer[1024];

std::string MyFunc() {
    ....
    ....
    return buffer;
}
Run Code Online (Sandbox Code Playgroud)

但是当我添加这行代码时

char * ret;
ret = MyFunc() 
Run Code Online (Sandbox Code Playgroud)

它抱怨:"错误:没有合适的转换函数从"std :: string"到"char*"存在"

我的问题是为什么编译器现在抱怨?为什么这种语法检查不稳定?再一次,我没有改变MyFunc()的自由.在我的程序中,如果我可以

std::string ret;
ret = MyFunc(); 
Run Code Online (Sandbox Code Playgroud)

并摆脱语法错误,但真的想了解这种奇怪的行为.

Sag*_*ual 7

string()有一个接受char*的构造函数,所以你得到一个自动转换.没有从字符串到char*的自动转换.你必须调用string :: c_str()来获取char*.

编辑 虽然你只询问了对行为的解释,但是这个论坛中的其他人似乎认为我没有提到string :: c_str返回一个const char*,而不是一个简单的char*.但解释仍然存在:没有从字符串到char*或const char*的隐式/自动转换.随意阅读c_str这里,如果对你很重要.

  • @GreatBigBore,那是一个`const char*`.它与`ret`不兼容. (4认同)
  • @GreatBigBore是的,但这很简单:只需输入42,你就完成了. (2认同)