这不是我的计划,所以不要开始指责我:-).我得到了一些随机程序.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)
并摆脱语法错误,但真的想了解这种奇怪的行为.
string()有一个接受char*的构造函数,所以你得到一个自动转换.没有从字符串到char*的自动转换.你必须调用string :: c_str()来获取char*.
编辑 虽然你只询问了对行为的解释,但是这个论坛中的其他人似乎认为我没有提到string :: c_str返回一个const char*,而不是一个简单的char*.但解释仍然存在:没有从字符串到char*或const char*的隐式/自动转换.随意阅读c_str这里,如果对你很重要.
| 归档时间: |
|
| 查看次数: |
171 次 |
| 最近记录: |