将char*转换为string*会发生什么?
char * ss = "abscd";
string * b = (string *) ss;
std::cout << ss << std::endl;
std::cout << *b << std::endl;
输出是:
abscd
//empty line
我以为会是:
abscd
abscd
回答
你一定是误会了什么。首先,你错过了const
这里:
const char * ss = "abscd";
下一步,std::string
是为了替换 c 字符串,就像你用ss
. 然而,std::string
是一个字符串,而std::string*
是一个指向字符串的指针。由于std::string
是不相关的char
,只要指针之间的转换而言,你的代码中有未定义的行为。
要从std::string
c 字符串创建 a ,请使用其构造函数,例如:
std::string b{ss};
最后但并非最不重要的一点是,避免像这样的 c 风格强制转换string * b = (string *) ss;
。您可以将任何内容转换为任何内容而不会出现编译器错误,但这并不意味着它是正确的。