C++ private替换为public是否有问题?

做单元测试的时候,为了验证类的私有方法或变量,需要将访问权限都改为public。

为了不改动源代码,可以在编译时,添加宏定义替换权限

CPPFLAGS=-Dprotected=public -Dprivate=public

绝大部分情况下是不会出现问题的。


注意到C++的默认规则,默认权限是private。

如果代码中没有明确的写private,那么上面的方法编译时可能会编译错误。

写个例子:

class A {
    struct MyStruct;//前置声明
private:
    struct MyStruct {//定义
        int a;
    };
};

如果将private改为public,声明和定义的权限不一致,编译错误。

g++ -Dprotected=public -Dprivate=public  main.cpp 
main.cpp:7:5: 错误:‘struct A::MyStruct’重声明时有不同的可访问性

建议:写业务代码时,权限最好显式地声明清楚。


refer

https://www.freesion.com/article/1532543526/

posted @ 2022-05-09 13:41  天下太平  阅读(219)  评论(0编辑  收藏  举报