如何理解这段用于类型检查的C++代码
How to understand this piece of C++ code, which is for type checking?
可能重复:
以下代码是如何工作的?
#define TYPE_CHECK(T, S)
while (false) {
*(static_cast<T* volatile*>(0)) = static_cast<S*>(0);
}
我觉得这很棘手,它是如何工作的?为什么不稳定?
由于它是一个静态类型转换,它让编译器确保指向这两种类型的指针是等效的。while(false)
确保它永远不会运行,并且它只是编译时的事情。
它静态地检查S*
是否可以转换为T*
。运行时不执行任何代码。我认为volatile
阻止了优化,这只会使编译器忽略代码。
代码检查S*是否可以分配给T*,如果不能,则强制执行编译错误。至于易失性,我不确定。
如果类型不能强制转换,它就不会编译。但它从未被执行过。
相关文章:
- 键入特征以检查类型是否可从流和 MSVC 读取
- 在编译时检查类型是否为 std::basic_string<T> C++
- 检查类型 T 是否具有成员函数 SFINAE 的任何重载
- 检查类型是否为模板的实例化
- 如何检查类型 'T' 是否具有'T(std::initializer_list<U>)'构造函数
- 使用 python 绑定来检查 C++ 类型是否是规范方式的指针、引用等?
- 检查类型的相等性
- C++编译时检查类型
- 使用模板C++检查类型
- 如何检查类型 T 是否在参数包 Ts 中
- 如何使用条件来检查类型名 T 是否是 C++ 中浮点类型的整数类型
- 检查类型是否在 C++ 中定义了 [][]
- 是否有类型特征检查类型之间的包含
- 如何在运行时检查类型
- 使用SFINAE检查类型是否可以绑定到模板模板参数
- 如何检查类型是否是给定类模板的实例化
- 如何在编译时检查类型
- 检查类型是否可以作为 boost::lexical_cast <string>的参数
- 如何检查类型是通过 typedef 定义的还是在模板参数中使用定义的
- 检查类型是否为地图