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

 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混淆了

最佳答案

但我对[在此处使用枚举]感到不满意,因为问题是布尔型的(执行或不执行)


不,一个枚举对此很完美,请使用它。 FWIW,CodeReview中有another discussion about this case

也就是说,是的,包装函数很可能会内联。 C ++旨在提供无运行时成本的抽象。内联函数调用是这方面的基本工具,因此编译器会在适用的情况下使用它。

10-06 11:32