首先,您提供的所有定义在语法上都是正确的。如果它们编译,那么它们在语法上是正确的。
const
参数限定符只有一个目的:防止函数体修改限定const
参数。
在您的示例代码的特定情况下,该方法Foo::bar
不会修改参数,因此使用const
限定符没有任何效果。
但是,您可能希望const
在所有情况下都使用默认值,并且仅在您希望允许修改的情况下将其删除。因此,将其应用于参数Foo::bar
是一个好主意。我认为这是一种很好的做法,尽管我承认我很少使用它,因为它会产生一点噪音,这可能会降低可读性。
另一件需要考虑的事情是,对于原始类型,或者更准确地说,不是指针或不包含指针的类型,修改按值传递的参数(即不是通过引用)不会有任何副作用:这些类型的参数确实起作用作为初始化的局部变量(这可能很方便,但也可能令人困惑)。对于指针,任何对指向数据的修改都会泄露给外界。这是在指针和类型的指向部分const
使用限定符的另一个很好的理由。
总而言之,const
尽可能多地使用限定符将有助于使代码不易出错,还可以帮助编译器优化生成的程序。
但是,如果这些类型描述了适合 CPU 寄存器的值(通常是这种情况),则使用这些类型的引用不应产生任何重大变化,
因此,该方法的所有三个版本都应该归结为相同的生成汇编代码。
在原始返回类型的特定情况下,这无关紧要。返回值可以来回转换为const
合格的。
其他人也提到了const
限定符对函数本身的兴趣。虽然超出了最初的问题范围,但我还要说,在可能的情况下(例如 for Foo::bar
)将函数限定为 确实更好const
。