我实际上有两个问题。

  • 这是“if(ClassPtr1)&&(ClassPtr2)”检查它们是否不为null的正确方法吗?
  • 我想知道是否有可能在多行宏中完全包含if else语句。我已附上示例代码。
    #define MACRO_NAME(object,expression){\
    Class1* ClassPtr1 = dynamic_cast<Class1*>(object);\
    Class2* ClassPtr2 = ClassPtr1->SomeMethod();\
    if (ClassPtr1) && (ClassPtr2)\
    {\
        try\
        {\
            //some code
        }\
        catch(...)\
        {\
            //some code
        }\
    }\
    else\
        return expression;\
    }
    
  • 最佳答案

    1:否。您在检查之前使用ClassPtr1,如果它实际上为null,则这是未定义的行为。您需要首先获取ClassPtr1,然后进行检查,然后使用它来获取ClassPtr2,然后进行检查。

    2:是的,原则上还可以宏是否完全是个好主意是另一个问题。

    09-06 22:27