C++ c++;

C++ c++;,c++,C++,我有下面的方法和多个常量关键字。为什么使用它们 const int* MyClass::getvalue(const int input) const const int MyClass::getvalue(const int input) const ^ 如果从方法返回指针,有哪些方法可以限制用户更改指针值和指针本身?首先,将值(相对于引用或指针)的返回类型设置为常量是毫无用处的。函数的调用方仍然可以将值复制到非常量变量。对于引用或指针,这意味着不能修改被引用/指向的对象。但它仍然可以复制

我有下面的方法和多个常量关键字。为什么使用它们

const int* MyClass::getvalue(const int input) const
const int MyClass::getvalue(const int input) const
^

如果从方法返回指针,有哪些方法可以限制用户更改指针值和指针本身?

首先,将值(相对于引用或指针)的返回类型设置为
常量是毫无用处的。函数的调用方仍然可以将值复制到非常量变量。对于引用或指针,这意味着不能修改被引用/指向的对象。但它仍然可以复制到非常量对象

参数为
const
表示函数无法更改参数。它部分是信息性的,部分帮助编译器选择优化,对于引用或指针,意味着引用/指向的内容不能修改。对于引用,还可以使用语义将临时对象传递给函数


最后一个
const
用于函数本身,使函数只能在
const
对象上调用。如果您有一个非常量
MyClass
对象,则无法对其调用此函数。此
const
与函数名及其参数类型一起是函数签名的一部分。这意味着您可以有两个具有相同名称和参数的重载函数,一个是
const
限定函数,另一个不是限定函数

我有下面的方法和多个常量关键字。为什么使用它们

const int* MyClass::getvalue(const int input) const
const int MyClass::getvalue(const int input) const
^
这使得返回值为常量。没有理由使用按常量返回的值。如果在此处使用const,某些编译器将发出警告。请注意,相反,指向const对象的引用或指针是合理的

这使得论点是恒常的。值参数是否为常量差别不大。const的一个小优点是,您可以从声明中知道局部对象在整个函数中不会改变,如果函数很复杂,这会很有帮助

这使得成员函数常量为。这允许对类的const实例调用member函数,但也防止该函数修改对象的不可变成员


如果从方法返回指针,有哪些方法可以限制用户更改指针值和指针本身

没有办法限制用户更改您返回给他们的指针对象的值,也没有必要这样做


您可以通过返回指向常量的指针来限制用户修改pointed对象。

最后一个
const
指定
getvalue()
不会更改调用它的
MyClass
实例

const int input
向指定为
const
的函数
getvalue()
声明类型为
int
的参数。其值不能在函数内部更改

在返回类型中,
const
毫无意义,因为返回值可以毫无问题地分配给非const限定的
int

有哪些方法可以限制用户更改指针值和指针本身

向后阅读声明:

int const * const foo; // foo is a constant pointer to a constant int
int       * const bar; // bar is a constant pointer to a          int
int const *       qux; // qux is a          pointer to a constant int

请看,代码中没有指针。你问的是哪个问题?“对于引用或指针,它意味着引用/指向的对象不能修改”不是真的。如果
T1
T2*
,则
const T1
与您刚才概述的任何其他
T1
原因相同,因此无效。只有当
T1
constt2*
时才有用处,但这是一个完全不同的场景。