c++ - 为什么在声明中将 cv 限定符添加到值参数

标签 c++ declaration qualifiers

我最近发现您可以在函数声明及其实现中的值参数中添加和删除 cv 限定符。例如:

F.h

f(const int i);

F.cpp

f(int i) { i++; }

测试.cpp

#include "F.h"
f(0);

将调用 f(int i) 实现。由于它是按值复制,因此我认为代码编译没有问题。但是任何人都可以想象这样一种情况,将 const 添加到上面所做的声明中是有用的吗?为什么有可能呢?也许有人可以提供更有用的应用程序?

最佳答案

函数参数上的顶级 CV 限定符将被忽略,即它们不是函数签名的一部分。相反,如果您愿意,它们是函数实现 的一部分,因为它们限定了与形式函数参数相对应的局部变量。因此,如果您愿意,您可以在函数定义中限定函数参数:

int power(int val, int n, int base);

int power(int val, int n, const int base)
{
    while (n --> 0) val *= base;
    return val;
}

不过,如果定义中的函数参数与声明中的不同,有些人会觉得很冒犯。这是品味和风格的问题。限定参数的好处可能很小,尽管在记录您不打算更改变量方面对实现有一定的值(value)。

关于c++ - 为什么在声明中将 cv 限定符添加到值参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21147704/

相关文章:

c++ - 如何在没有实例的情况下获取非静态方法的类型?

c++ - 函数内部的函数声明是否有用?

c++ - 使用迭代器获取 vector 的索引

c# - 是否可以在 C# 中反序列化已在 C++ MFC 中二进制序列化的对象?

c - 使用 extern 声明数组时指定其大小有什么不同吗?

c++ - 在变量 C++ 周围使用大括号(大括号)

c++ - 什么是 "rvalue reference for *this"?

C++类型限定符问题

common-lisp - 停止该方法调用:after

c++ - C++ 如何检查一个数组是否等于任何其他数组?