gpt4 book ai didi

c++ - 为什么从 int 到 char* 的转换不同于从 std::string 到 char* 的转换?

转载 作者:行者123 更新时间:2023-11-30 03:50:40 24 4
gpt4 key购买 nike

我正在学习 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*'

为什么这个转换失败了?

最佳答案

Andrei Alexandrescu 臭名昭著的示例仅适用于普通旧数据类型。

对指针起作用。转换不相关指针类型的行为是未定义的。

您可以将reinterpret_cast 转换为void*,并将void* 的reinterpret_cast 转换回原始指针类型。

关于c++ - 为什么从 int 到 char* 的转换不同于从 std::string 到 char* 的转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31614015/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com