0

我们有几个类,其中对成员函数的调用可能会改变状态,有时不依赖于具有默认值的布尔值。

 A a;
 a.set( "foobar" );
 assert( a.changed() == true );

相对

 A a;
 a.set( "foobar", false );
 assert( a.changed() == false );

请注意,这些成员函数是虚拟的。我倾向于使用别名来更好地阅读代码,并使私有成员函数仍然允许旧方法,并且只将包装器提供给公众:

 a.silentlySet( "foobar" ) {
    a.set( "foobar", false );
 }

我想这无论如何都会被内联。我知道我可以编写枚举和常量,这也可以提高可读性:a.set( "foobar", SILENTLY );但我感觉不太好,因为问题是布尔性质的(做或不做)。另一方面。但是,我想听听您如何处理这种情况。(我想我会得到一个“视情况而定”的答案,因为我肯定错过了一些关键细节)接受它吗?

这些成员函数不经常被调用和使用,但也不是很少。我担心的是,有时您可能会将布尔值误解为silent/not_silent-flag,而这具有其他含义。

这也可能具有误导性的示例:

if( b->getData( false ) && something_other )

这可能与b->getData() == false

4

1 回答 1

3

但我对 [在此处使用枚举] 感觉不好,因为问题是布尔性质的(做或不做)

不,枚举非常适合这个,使用它。FWIW,CodeReview 上有关于这个案例的另一个讨论。

也就是说,是的,包装函数很可能是内联的。C++ 就是提供没有运行时成本的抽象。内联函数调用是这方面的基本工具,因此编译器在任何适用的地方都使用它。

于 2012-07-09T09:46:13.967 回答