【发布时间】:2016-05-28 05:18:27
【问题描述】:
我正在比较 typedef value_type 类的两个指针,它们分别是 T* 或 char16_t 类型。
编译器抱怨我无法比较这两者,因为它们是不同的类型:
'some_type1<char16_t>::value_type*' and 'some_type2<char16_t>::value_type*' lacks a cast
奇怪的是,我不能static_cast<> 介于两者之间:
invalid static_cast from type 'some_type1<char16_t>::value_type*' to type 'char16_t*'
无论我使用reinterpret_cast<> 比较还是仅使用static_cast<> 双方与void* 进行比较,有区别吗?
我在某处读到 reinterpret_cast<> 在运行时完成,但我不确定。
更新
我误以为reinterpret_cast<> 是在运行时完成的。经过进一步讨论,我现在明白它纯粹是一个编译时构造。
但奇怪的是,static_cast<> 也有运行时开销,即通过匹配构造函数将特定对象转换为另一个对象。
例如,您可以将原始int 转换为带有static_cast<> 的向量。这似乎适用于所有static_cast<T>(e) 有效的情况。
【问题讨论】:
-
慢一点?这一切都是在编译期间完成的,你真的关心编译器完成这项工作需要多长时间吗?
-
请edit 您的问题包含minimal reproducible example 并澄清问题。例如,以下与自身冲突;
char16_t不能等同于指针类型:它们都是T*或char16_t类型 -
如果你不确定你应该检查Documentation。是的,它可能存在错误(我在使用它的几年中见过 2 次),但如果您不记得某些东西是如何工作的,这是一个很好的起点。
-
当你引用
char16_t的指针时,你的意思是char16_t*吗?前者是整数类型,不是指针。 -
目前尚不清楚您要达到的目标。这两个指针完全不相关,那么将一个指针转换为另一个指针并进行比较会给您带来什么?
标签: c++ void-pointers reinterpret-cast static-cast