这不是我的程序所以不要开始责备我:-)。我得到的一些随机程序。 MyFunc() 正在返回全局声明的缓冲区。我使用 VS2008,它没有提示
static char buffer[1024];
std::string MyFunc() {
....
....
return buffer;
}
但是当我添加这行代码时
char * ret;
ret = MyFunc()
它提示:“错误:不存在从“std::string”到“char *”的合适的转换函数”
我的问题是为什么编译器现在会报错?为什么语法检查会出现这种不稳定的情况?同样,我没有更改 MyFunc() 的自由。在我的程序中,如果我能做到
std::string ret;
ret = MyFunc();
并摆脱语法错误,但真的很想了解这种奇怪的行为。
最佳答案
string() 有一个接受 char* 的构造函数,因此您可以进行自动转换。没有从字符串到 char* 的自动转换。您必须调用 string::c_str() 才能获取 char*。
编辑 尽管您只要求对行为进行解释,但该论坛中的其他人似乎认为我没有提及 string::c_str 返回一个 const char*,而不是一个简单的 char*,从而欺骗了您。但解释仍然存在:不存在从字符串到 char* 或 const char* 的隐式/自动转换。请随意阅读有关 c_str here 的信息如果这对您很重要。
关于c++ - std::string 声明的函数不会提示返回 char *,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24045897/