class const属性初始化
class const attribute initialization
我有一个 class,它有一个成员属性,我只在构造时设置了一次,此后是只读的。此属性在 class 的所有实例中都不相同。因此,我想将此属性定义为 const T
.
我无法在构造函数体内为属性赋值,只能在构造函数的初始化列表中初始化它的值。此外,初始化列表仅限于表达式。因此,在我本应使用 switch 语句为该属性赋值的地方,我不得不使用一长串三元操作。
我现在的情况是:
- 接受 ugly/verbose 初始化代码以使属性定义与其预期语义保持一致,或者,
- 将成员属性定义为
T
(因此删除 const
修饰符)并使用更简洁的 switch 语句在 class 构造函数主体中初始化属性。
我应该选择哪个?什么是公认的或首选的规范?我倾向于 1,因为代码的语义对我来说真的很重要。
谢谢!
您可以将初始化分解成一个函数,从而使初始化更简洁。听起来逻辑可能太长而无法在 lambda 中整齐地编写,因此您可以只使用静态成员函数(或自由函数)来完成此任务。
Foo::Foo(Bar args)
: constMember(makeMyConstMember(args))
{}
否则,删除 const
是一个烦人但可以接受的解决方法。 const
很棒,但代码简洁易读更为重要。
我有一个 class,它有一个成员属性,我只在构造时设置了一次,此后是只读的。此属性在 class 的所有实例中都不相同。因此,我想将此属性定义为 const T
.
我无法在构造函数体内为属性赋值,只能在构造函数的初始化列表中初始化它的值。此外,初始化列表仅限于表达式。因此,在我本应使用 switch 语句为该属性赋值的地方,我不得不使用一长串三元操作。
我现在的情况是:
- 接受 ugly/verbose 初始化代码以使属性定义与其预期语义保持一致,或者,
- 将成员属性定义为
T
(因此删除const
修饰符)并使用更简洁的 switch 语句在 class 构造函数主体中初始化属性。
我应该选择哪个?什么是公认的或首选的规范?我倾向于 1,因为代码的语义对我来说真的很重要。
谢谢!
您可以将初始化分解成一个函数,从而使初始化更简洁。听起来逻辑可能太长而无法在 lambda 中整齐地编写,因此您可以只使用静态成员函数(或自由函数)来完成此任务。
Foo::Foo(Bar args)
: constMember(makeMyConstMember(args))
{}
否则,删除 const
是一个烦人但可以接受的解决方法。 const
很棒,但代码简洁易读更为重要。