我需要注意使用 const
修饰符是否对原始类型起作用?哪个语法更正确,为什么?
第一个版本:
float Foo::bar(float a, float b)
{
return (a + b) / 2.0f;
}
第二个版本:
const float Foo::bar(const float a, const float b)
{
return (a + b) / 2.0f;
}
第三个版本:
float Foo::bar(const float a, const float b)
{
return (a + b) / 2.0f;
}
我知道原始类型的变量在传递给某个方法时会被复制,但哪种方式更清晰呢?
const_cast
(或C风格的转换)来这样做,因为它是基本类型的rvalue表达式。 因此,即使它是非const的,他们也不能获得非const引用而不经过转换。 不确定这是我们真正需要支持的功能,但更重要的是,如果你的函数返回一个类类型的const
对象,那通常是不好的,因为它防止了从中移动或调用其非const成员函数。 - Steve Jessopbool
,最好将其声明为const
,以避免在条件表达式中出现意外的赋值。虽然可以通过提高编译器警告来避免这种情况,但是,被咬一次后会对此更加小心谨慎。 - Peter Woodconst
在维护期间避免创建错误也会有所帮助。在这个简单的例子中可能不需要,但是在具有许多类似名称变量的复杂函数中,它可能很有用。 - John Dibling