class const属性初始化

class const attribute initialization

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

我无法在构造函数体内为属性赋值,只能在构造函数的初始化列表中初始化它的值。此外,初始化列表仅限于表达式。因此,在我本应使用 switch 语句为该属性赋值的地方,我不得不使用一长串三元操作。

我现在的情况是:

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

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

谢谢!

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

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

否则,删除 const 是一个烦人但可以接受的解决方法。 const 很棒,但代码简洁易读更为重要。