C++中能否简化多层类成员访问的点运算符路径?
C++中能否简化多层类成员访问的点运算符路径?
当然可以啦!你说的这种长链式点运算符访问确实挺繁琐的,C++里有好几种比指针更顺手的简化方式,我给你详细说说:
使用引用(Reference):这是最直接的解决方案,相当于给深层嵌套的变量起了个“别名”,用起来和直接访问原变量完全一样,还不用像指针那样每次都要解引用。举个例子:
// 用auto自动推导变量类型,&表示定义的是引用 auto& variableAlias = class1.class2.class3.variableName; // 之后直接用别名就能访问原变量 int x = variableAlias; // 如果要修改原变量的值,直接操作别名就行,和改原变量效果一样 variableAlias = 200;而且引用必须绑定到有效的对象上,不会出现空指针的问题,比指针更安全。如果你的场景只需要读取变量不需要修改,还可以用
const auto&来定义,符合const正确性原则:const auto& variableAlias = class1.class2.class3.variableName;局部临时简化:如果只是在某一段代码里频繁访问这个深层变量,甚至还需要访问中间类的其他成员,还可以先把中间层对象也用引用简化:
auto& class2Alias = class1.class2; auto& class3Alias = class2Alias.class3; // 之后不仅能简化目标变量的访问,还能方便访问class3的其他成员 int x = class3Alias.variableName; int y = class3Alias.anotherVariable;
比起你提到的指针方案,这些方法写起来更简洁,读代码的人也能一眼看懂这是原变量的别名,理解成本更低。
内容来源于stack exchange
相关产品推荐
相关产品推荐

