函数中的const限定符
const qualifier in a function
关于使用"const"限定符,这三个函数之间有什么区别
int& func (const int& var)
我知道const限定符将输入保持为只读,并且不能在函数内部更改。
int const func (int& var)
这个也返回const变量,但这意味着什么?这意味着它不能通过代码更改?
int& func (int& var) const
这个呢?我不知道这意味着什么。
int& func (const int& var) ^^^^^^^^^^^^^^
突出显示的部分是参数声明。部分const int&
是自变量变量的类型,var
是变量的名称。
通常,constness应用于左边,但在这种情况下,它是该类型中最左边的标记。在这种特殊情况下,它适用于权利。右边是int
。因此,它是一个const int。作为一个整体,参数的类型是对const int的引用。
int const func (int& var) ^^^^^^^^^
突出显示的部分是函数的返回类型声明。返回类型是const int对象。尽管它的格式很好,但返回const int从来都没有意义,因为const与调用者无关。大多数编译器都可以选择在出现此类声明时发出警告。
从技术上讲,返回常量类对象可能与返回非常量类对象不同,但我还没有见过这样有用的情况。
int& func (int& var) const
参数列表后的Const应用于函数本身。不能对非常量对象或引用调用常量成员函数。成员函数的隐式*this
参数将是常量。Const限定符不能应用于非成员函数或静态成员函数。
关于这个问题的旧版本。。。
关于使用";const";修改
int& func (int& const var) int& const func (int& var)
这两个是不正确的。Const限定符不能应用于引用(尽管可以引用Const类型,并且这种引用通常称为Const引用)。
您需要从右到左阅读常量量词才能理解它们。因此,例如int const func(int&var)返回一个const int
下面是一个使用示例:
#include <stdexcept>
#include <iostream>
int& func(const int& var)
{
std::cout << "func(const int& var) calledn";
throw std::runtime_error("not implemented");
}
int const func(int& var)
{
std::cout << "func(int& var) calledn";
throw std::runtime_error("not implemented");
}
struct A {
int& func(int& var) const
{
// i = 2; illigal since const function
std::cout << "func(int& var) const calledn";
throw std::runtime_error("not implemented");
}
int i;
};
int main()
{
try
{
const int i = 1;
func(i);
}
catch (std::exception) {}
try
{
int j = 2;
func(j);
}
catch (std::exception) {}
try
{
A a;
int k = 2;
a.func(k);
}
catch (std::exception) {}
}
相关文章:
- 在 const 函数中通过引用和指针返回之间的区别
- 使用 std::string () const 函数启动线程或未来
- 如果我在 const 函数上使用指针,我可以返回什么?
- 为什么 const 函数返回左值而不是右值?
- 当我调用 main 中使用 const 对象的 const 函数时,不断出现错误
- 在 const 对象上调用非 const 函数
- 析构函数是否可以在 const 对象上调用非 const 函数
- C/C++ 如何在一次函数调用中交出 const 函数指针或简单指针
- 为什么我可以在C 11中使用const函数修改类
- 防止const函数被调用非const对象
- 如果C 中的支架重载运算符被声明为const函数
- C++:防止在 const 函数中更改指针的值
- 从const函数返回非const属性参考
- 调用指针参数从const函数指向的对象的操作员
- 在const函数中调用非CONST成员的非const函数
- 无法将 const 数据类型传递到非 const 函数中
- 这是检查 const 函数(如果是否创建某些内容)的更好方法
- 在 const 函数中从地图中未经选中读取
- 编译器不会为 "const" 和"not-const"函数给出不明确的错误吗
- 通过const函数中的参数索引返回std :: map的值