C ++中函数中Const使用的区别

问题描述 投票:-3回答:3

我有以下方法使用多个const关键字。他们为什么用?

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

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

c++
3个回答
3
投票

我有以下方法使用多个const关键字。他们为什么用?

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

这使得返回值为const。没有理由使用const值返回。如果你在这里使用const,一些编译器会发出警告。请注意,相反,引用或指向const对象的指针是合理的。

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

这使得参数为const。值参数是否为const几乎没有区别。 const的一个小优点是你可以从声明中知道本地对象在整个函数中不会改变,这在函数很复杂时会很有用。

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

这使得成员函数const。这允许在类的const实例上调用成员函数,但也阻止函数修改对象的非可变成员。


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

没有办法限制用户更改您返回给它们的指针对象的值,并且从不需要这样做。

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


5
投票

首先,使const的值(与引用或指针相对)的返回类型相当无用。无论如何,函数的调用者仍然可以将值复制到非常量变量。对于引用或指针,这意味着无法修改引用/指向的对象。它仍然可以复制到非常量对象。

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

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


2
投票

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

const int inputint类型的参数声明为指定为getvalue()的函数const。它的值在函数内部无法更改。

在返回类型中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
© www.soinside.com 2019 - 2024. All rights reserved.