File indexing completed on 2024-05-05 05:41:40
0001 #include <QtCore/QObject> 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 0012 0013 0014 0015 0016 0017 struct A 0018 { 0019 virtual void foo() { } 0020 }; 0021 0022 struct B : public A 0023 { 0024 0025 }; 0026 0027 void test() 0028 { 0029 A *a = new A(); 0030 B *b = new B(); 0031 0032 dynamic_cast<A*>(b); // warning: Casting to base 0033 dynamic_cast<A*>(a); // warning: Casting to itself 0034 dynamic_cast<B*>(a); // OK 0035 dynamic_cast<B*>(b); // warning: Casting to itself 0036 static_cast<A*>(b); // warning: Casting to base 0037 static_cast<A*>(a); // warning: Casting to itself 0038 static_cast<B*>(a); // OK 0039 static_cast<B*>(b); // warning: Casting to itself 0040 } 0041 0042 class MyObj : public QObject 0043 { 0044 Q_OBJECT 0045 public: 0046 }; 0047 0048 void testQObjectCast(QObject *o) 0049 { 0050 dynamic_cast<MyObj*>(o); // Warn 0051 qobject_cast<QObject*>(o); // Warn 0052 MyObj myobj; 0053 qobject_cast<QObject*>(&myobj); // Warn 0054 qobject_cast<MyObj*>(o); // OK 0055 } 0056 0057 class FwdDeclared; 0058 0059 class MyObj2 : public QObject 0060 { 0061 public: 0062 Q_DECLARE_PUBLIC(QObject) // OK, in macro 0063 MyObj2 *q_ptr; 0064 }; 0065 0066 struct Base2 {}; 0067 class Base1 : public QObject {}; 0068 0069 class Derived : public Base1, public Base2 0070 { 0071 public: 0072 void test() 0073 { 0074 static_cast<Base1*>(this); // OK 0075 static_cast<Base2*>(this); // OK 0076 } 0077 }; 0078 0079 void test2() 0080 { 0081 static_cast<MyObj*>(nullptr); // OK 0082 static_cast<MyObj*>(0); // OK 0083 0084 MyObj *o1; 0085 MyObj2 *o2; 0086 true ? static_cast<QObject*>(o1) : static_cast<QObject*>(o2); // Ok 0087 true ? static_cast<QObject*>(o1) : static_cast<QObject*>(o2); // Ok 0088 } 0089 class MyObj4 : public QObject 0090 { 0091 Q_OBJECT 0092 public: 0093 void test() 0094 { 0095 qobject_cast<MyObj4*>(sender()); // OK 0096 } 0097 };