具有原始类型的 C++ const 修饰符

标签 c++

我应该注意使用原始类型的 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,这是正确的,因为您没有修改它们。这可以帮助编译器优化传递参数以及计算。

并且返回类型不是const,因为调用者可能想要修改返回值。如果调用者不想修改返回值,则由调用者将其分配给 const 变量。

我还会将 const 添加到函数声明中,因为该函数不会修改对象中的任何内容:

float Foo::bar(const float a, const float b) const

关于具有原始类型的 C++ const 修饰符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16033751/

相关文章:

c++ - 链接 : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use/NODEFAULTLIB:library

c++ - 将父类的 const 引用转换为派生的子对象

C++ 多态加载/保存

c++ - 用于在 C++ 中创建 Windows 服务的 Visual Studio 项目模板

python - 使用 SWIG 包装 C/C++ 库

c++ - Poco 任务管理器/Boost 线程混合和匹配

c++ - 错误是什么?Q-确定并打印给定 n 值的以下谐波级数之和。(1+1/2+1/3+........+1/n)

c++ - 如何创建一个一维数组来容纳多个二维数组?

c++ - 优化文件读取C++

c++ - 切换 QPushButton