为什么从int转换为char *与从std :: string转换为char *不同?

时间:2015-07-24 15:09:17

标签: c++ reinterpret-cast

我正在学习C ++并阅读Andrei Alexandrescu关于泛型编程的书。他提出了一个模板化的类,可用于在类型之间进行转换:

template <class To, class From>
To safe_reinterpret_cast(From from)
{
    assert(sizeof(From) <= sizeof(To));
    return reinterpret_cast<To>(from);
}

这适用于:

int i = 5;
char* p = safe_reinterpret_cast<char*>(i);

失败
std::string a("apple");
char* pp = safe_reinterpret_cast<char*>(a);

这是编译时的错误失败:

invalid cast from type 'std::basic_string<char>' to type 'char*'

为什么这个演员会失败?

2 个答案:

答案 0 :(得分:1)

因为intchar是基本类型,而std::string则不是。

答案 1 :(得分:1)

Andrei Alexandrescu的臭名昭着的例子仅适用于普通数据类型。

指针工作。铸造不相关指针类型的行为是未定义的。

您可以 reinterpret_cast到void*,并将void*的reinterpret_cast重新设置回原始指针类型。