我今天正在处理一个特定于平台的错误,在该错误中,在 Windows 机器上某个字符串会很乱码,但在 Mac 上则不然。std::string
该错误与在和之间进行显式和隐式转换的几行有关const char *
。基本上,我有一个带有签名的函数
void foo(const std::string &id);
其中 foo 在某些时候打印字符串。在 Windows 上,如果像下面这样调用,它将打印具有各种损坏级别的 id 字符串(前几个字符乱码或与整个字符串一样多)
std::string mystring = bar();
const char *id = mystring.c_str();
foo(id); // pass the C style string in because I thought that's what it took
我通过正确调用纠正了错误foo
:
std::string mystring = bar();
foo(mystring);
我无法弄清楚一些事情,比如
- 错误的根源是什么?
- 为什么它是特定于平台的?
const char *
和之间的隐式转换std::string
是否安全?