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