首页 > 解决方案 > 类 const 属性初始化

问题描述

我有一个具有成员属性的类,我只在构造时设置一次,之后是只读的。该属性在该类的所有实例中并不相同。因此,我想将此属性定义为const T.

我不能为构造函数体内的属性赋值,但只能在构造函数的初始化列表中初始化它的值。此外,初始化列表仅限于表达式。结果,在我将使用 switch 语句为该属性分配值的情况下,我不得不使用一长串三元运算。

我现在的情况是:

  1. 接受丑陋/冗长的初始化代码以保持属性定义与其预期语义一致,或者,
  2. 将成员属性定义为T(因此删除const修饰符)并使用更简洁的 switch 语句在类构造函数的主体中初始化属性。

我应该选择哪个?什么是公认的或首选的规范?我倾向于 1,因为代码的语义对我来说非常重要。

谢谢!

标签: c++oopconventions

解决方案


您可以通过将其划分为一个函数来使初始化更整洁。听起来逻辑可能太长而无法在 lambda 中整齐地编写,因此您可以只使用静态成员函数(或自由函数)来完成此任务。

Foo::Foo(Bar args)
   : constMember(makeMyConstMember(args))
{}

如果做不到这一点,删除const是一个烦人但可以接受的解决方法。const很棒,但干净易读的代码更重要。


推荐阅读