c++ - 什么情况下会声明一个非引用、非指针类型的函数参数const?

标签 c++

我有以下函数声明:

void fn(int);

这个函数有一个整型参数。现在,我可以通过传递一个非 const 或一个 const 整型对象来调用这个函数。在任何一种情况下,此函数都会将对象复制到其本地 int 参数。因此,对该参数的任何修改都将是函数的局部修改,不会以任何方式影响调用者的实际参数。现在我的问题是在什么情况下我会将这个单一的 int 参数声明为 const 类型?我认为没有必要按如下方式声明此函数。

void fn(const int);

这是因为无论如何参数都将按值传递,并且函数在任何情况下都无法修改参数。我知道通过声明参数常量,函数不能在其主体内修改它。但是,由于参数是函数的局部参数,因此即使函数修改也没有任何缺点。

最佳答案

你是对的,对于调用者来说没有区别——它只在函数内部很重要。我更愿意尽可能地添加 const。在编写函数时,我在想“我想要这个参数,但无意修改它(即使只是在本地修改)”,编译器会让我保持诚实。

此外,在某些情况下,如果编译器知道变量是 const(如在循环边界中),则它可能能够进行更多优化。

关于c++ - 什么情况下会声明一个非引用、非指针类型的函数参数const?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3644810/

相关文章:

c++ - QProgressDialog : problems about MinimumDuration

c++ - 附加相同的插件,但来自 Excel 上的不同文件夹启动

c++ - std::array<T,N> 需要在其他类型中获取

c++ - 程序永远不会到达我可以输入信息的部分

C++ Std 队列和 vector 性能

c++ - 使用 checkTokenMemberShip 始终返回 true,即使进程用户不是管理员

c++ - 为什么不能显示指针的地址?

c++ - 计算 unordered_map 范围内的出现次数

C++ 指向具有匹配函数签名的任何类的成员函数的指针

c++ - 检查 fgets 是否会阻塞