C++ const定位的区别

use*_*650 13 c++ constants

我正在努力解决各种各样的地方之间的差异,你可以把'const'放在c ++的函数声明中.

const开头有什么区别:

const int MyClass::showName(string id){
...
}
Run Code Online (Sandbox Code Playgroud)

最后的const就像:

int MyClass::showName(string id) const{
...
}
Run Code Online (Sandbox Code Playgroud)

另外,在开头和结尾都有这样的结果是什么:

const int MyClass::showName(string id) const{
...
}
Run Code Online (Sandbox Code Playgroud)

Nav*_*een 26

const int MyClass::showName(string id)返回一个const int对象.因此调用代码不能更改返回的int.如果调用代码类似于const int a = m.showName("id"); a = 10;那么它将被标记为编译器错误.但是,如下面的@David Heffernan所述,由于整数是通过复制返回的,因此调用代码没有义务使用const int.它可以很好地声明int为返回类型并对其进行修改.由于对象是通过复制返回的,因此将返回类型声明为没有多大意义const int.

int MyClass::showName(string id) const告诉该方法showName是一个const成员函数.const成员函数是不修改类的任何成员变量的函数(除非它们被标记为mutable).因此,如果您int m_a在类中有成员变量,MyClass并且如果您尝试在m_a = 10;内部执行showName,则会出现编译器错误.

第三是上述两种情况的组合.

  • 第一段并不是很有说服力.const返回值不会强制您声明将返回值指定为const的变量.你可以同样写`int a = m.showName(..);`.然后你可以愉快地修改`a`. (7认同)

Dav*_*nan 11

  1. const连接到返回值适用于返回值.由于复制了返回值,因此它是一个毫无意义的声明,无论是否包含它都没有区别.
  2. const参数后列表意味着函数不会修改没有被标记为可变对象的任何状态.这是一个const成员函数,如果你有一个const对象,编译器将不允许你在const对象上调用非const成员函数.

这两种用法之间没有相互作用const- 它们是完全独立的结构


Jon*_*Jon 5

不同之处在于const适用于不同的事物。

这表示showName返回一个常int量值——一个不可变的值。当然,由于int是按值返回,const这里的存在没有任何作用。

const int MyClass::showName(string id)
Run Code Online (Sandbox Code Playgroud)

这表示这showName不会修改的可观察状态MyClass(技术上:它不会修改任何未声明的成员mutable),因此您可以在 type 的值上调用它const MyClass

int MyClass::showName(string id) const
Run Code Online (Sandbox Code Playgroud)

如果您同时使用这两个consts,则上述两个都适用。