static_cast 'unrelated types'
static_cast between 'unrelated types'
如果我有这样的类结构:
class A
{
public:
int a;
void funcA(){a = 0;}
};
class B
{
public:
int b;
void funcB(){b = 0;}
};
class C: public A, public B
{
public:
int c;
void funcC(){c = 0;}
};
为什么我可以执行这个强制转换?
A* pA = new A;
C* pC = static_cast<C*> (pA);
B* pB = static_cast<B*> (pC);
pB->funcB();
A和B是不相关的,不是吗?
它们可能是不相关的,但是编译器在这里不会进行跨转换诊断。
它只是说"哦,C
是A
的派生类,就我而言这是合法的"
在接下来的一行中,它说"哦,B
是C
的基类,就我而言,这是合法的"。差不多就是这样了。在您的示例中,C
在强制转换之间链接A
和B
。
相关文章:
- 使用 cmake 的 LLVM 构建在 tsan_libdispatch_mac.cc 期间失败; "Error: conflicting types for ..."
- 构建 TensorFlow r1.14 C++文件时缺少文件"tensorflow/core/framework/types.pb.h"
- 为什么"types may not be defined in parameter types"
- 如何在Arduino程序中解决"invalid operands of types"?
- 错误"invalid types ... for array subscript"是什么意思?
- 无法打开源文件"sys/types.h"、"sys/stat.h"
- 传递自定义函数类型时的'incompatible types in assignment'
- SWIG INOUT types (C++ to Python)
- 尝试实施 PIMPL idom 时如何避免"redefinition; different basic types"
- 有人能解释一下特殊的std::函数模板参数列表语法(这个奇怪的类型(Types..))吗
- 当foo是接受单个模板参数的结构时,'foo<Type1, Types...>'是否合法?
- 为什么编译器显示错误"no match for 'operator[]' (operand types are 'carti' and 'int')"
- " invalid operands of types 'int' and 'int* const'" 来自功能的错误,来自书
- 字符串"companion types"
- 使用 getline() 时编译错误: 'mismatched types'
- Typedef redefinition with different types (Emscripten SDL2+O
- 错误消息"deduced conflicting types for parameter 'const T'"
- 获取错误:"error: conflicting types for ‘call_celsius’ "和"note: previous implicit declaration of ‘call_ce
- char16_t and char32_t types in C++11
- static_cast 'unrelated types'