C++ 在不损失性能的情况下提高代码可读性

C++ 在不损失性能的情况下提高代码可读性,c++,boolean,default-arguments,member-functions,C++,Boolean,Default Arguments,Member Functions,我们有几个类,其中对成员函数的调用可能会改变状态,有时不依赖于具有默认值的布尔值 A a; a.set( "foobar" ); assert( a.changed() == true ); 对 A a; a.set( "foobar", false ); assert( a.changed() == false ); 请注意,这些成员函数是虚拟的。我倾向于使用别名更好地阅读代码,并使私有成员函数仍然允许旧方法,并且只向公众提供包装: a.silentlySet( "fooba

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

 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”,无声)
但是我感觉不太好,因为问题是布尔性质的(做或不做)。在另一边。不过,我想听听你是如何处理这种情况的。(我想我会得到一个“视情况而定”的答案,因为我肯定错过了一些关键的细节)接受它

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

这也可能产生误导的一个例子:

if( b->getData( false ) && something_other )
这可能与
b->getData()==false混为一谈

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

不,枚举非常适合于此,请使用它。FWIW,有一个关于CodeReview的

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

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

不,枚举非常适合于此,请使用它。FWIW,有一个关于CodeReview的


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

我刚刚加入了代码审查(不知道有这样的SE站点),所以任何拥有适当权限的人都可以随意将其移到CR,因为我想它更适合那里。我刚刚加入了代码审查(不知道有这样的SE站点),因此,任何拥有适当权利的人,都可以随意将其移动到CR,因为我想它更适合那里。枚举比布尔好。如果你的意思是沉默,说“沉默”,不要说“虚假”。只需几个
foo(true,false,true,true)
调用和随后的bug就可以真正欣赏两值枚举。而且,枚举声明了新类型。使用类型系统对您有利。枚举比布尔更好。如果你的意思是沉默,说“沉默”,不要说“虚假”。只需几个
foo(true,false,true,true)
调用和随后的bug就可以真正欣赏两值枚举。而且,枚举声明了新类型。使用类型系统对您有利。