首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++ const关键字解释

C++ const关键字解释
EN

Stack Overflow用户
提问于 2010-11-01 01:50:56
回答 9查看 41.1K关注 0票数 37

在阅读用C++编写的教程和代码时,我经常会遇到const关键字。

我看到它的用法如下:

代码语言:javascript
复制
const int x = 5;

我知道这意味着x是一个常量变量,并且可能存储在只读内存中。

但是什么是

代码语言:javascript
复制
void myfunc( const char x );

代码语言:javascript
复制
int myfunc( ) const;
EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2010-11-01 01:56:25

代码语言:javascript
复制
void myfunc(const char x);

这意味着参数x是一个字符,它的值不能在函数内部更改。例如:

代码语言:javascript
复制
void myfunc(const char x)
{
  char y = x;  // OK
  x = y;       // failure - x is `const`
}

对于最后一个:

代码语言:javascript
复制
int myfunc() const;

这是非法的,除非它在类声明中- const成员函数防止修改任何类成员- const非成员函数不能使用。在这种情况下,定义如下:

代码语言:javascript
复制
int myclass::myfunc() const
{
  // do stuff that leaves members unchanged
}

如果您有需要在const成员函数中修改的特定类成员,则可以将其声明为mutable。例如,成员lock_guard使类的const和非const成员函数成为线程安全的,但是必须在它自己的内部操作期间更改。

票数 58
EN

Stack Overflow用户

发布于 2010-11-01 01:57:10

第一个函数示例或多或少是没有意义的。更有趣的是:

代码语言:javascript
复制
void myfunc( const char *x );

这告诉编译器*x的内容不会被修改。也就是说,在myfunc()中,您不能执行以下操作:

代码语言:javascript
复制
strcpy(x, "foo");

第二个示例是关于C++成员函数的,这意味着对象的内容不会被调用更改。

因此,给定以下内容:

代码语言:javascript
复制
class {
  int x;
  void myfunc() const;
}

someobj.myfunc()不允许修改以下内容:

代码语言:javascript
复制
x = 3;
票数 10
EN

Stack Overflow用户

发布于 2010-11-01 01:56:06

这一点:

代码语言:javascript
复制
void myfunc( const char x );

意味着您不能在函数内部更改x,即这是非法的:

代码语言:javascript
复制
void myfunc( const char x ) {
    x = ...;
}

而:

代码语言:javascript
复制
int myfunc() const;

只有当myfunc()是类中的一个方法时才有意义;这基本上意味着该方法不能修改类实例(即调用instance.myfunc()前后实例的状态是相同的)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4064286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档