【发布时间】:2021-05-07 16:59:24
【问题描述】:
char * ss = "abscd";
string * b = (string *) ss;
std::cout << ss << std::endl;
std::cout << *b << std::endl;
输出是:
abscd
//empty line
我以为会是:
abscd
abscd
【问题讨论】:
-
这是未定义的行为,因为
std::string和char *是不相关的类型。 -
你可以构造一个像
std::string b{ss};这样的字符串,但是你不应该cast一个char*到一个string*,因为它们是完全不相关的类型 -
C++
static_cast会在编译时报错。 godbolt.org/z/c95xq8 -
(string *)是一个 c 风格的演员表。如果您通常避免这些,通常会大大提高代码质量。 -
也可以看看std::string_view。