Raj*_*ajX 34 c++ const constants
在阅读用C++编写的教程和代码时,我经常偶然发现const关键字.
我看到它使用如下:
const int x = 5;
Run Code Online (Sandbox Code Playgroud)
我知道这意味着它x是一个常量变量,可能存储在只读内存中.
但究竟是什么
void myfunc( const char x );
Run Code Online (Sandbox Code Playgroud)
和
int myfunc( ) const;
Run Code Online (Sandbox Code Playgroud)
?
Ste*_*end 55
void myfunc(const char x);
Run Code Online (Sandbox Code Playgroud)
这意味着该参数x是一个char,其值不能在函数内部更改.例如:
void myfunc(const char x)
{
char y = x; // OK
x = y; // failure - x is `const`
}
Run Code Online (Sandbox Code Playgroud)
对于最后一个:
int myfunc() const;
Run Code Online (Sandbox Code Playgroud)
这是非法的,除非它在类声明中 - const成员函数阻止修改任何类成员 - const不能使用非成员函数.在这种情况下,定义将是这样的:
int myclass::myfunc() const
{
// do stuff that leaves members unchanged
}
Run Code Online (Sandbox Code Playgroud)
如果您具有需要在const成员函数中修改的特定类成员,则可以声明它们mutable.一个示例是lock_guard使类const和非const成员函数线程安全的成员,但必须在其自己的内部操作期间进行更改.
Pau*_*oub 10
第一个功能示例或多或少没有意义.更有趣的是:
void myfunc( const char *x );
Run Code Online (Sandbox Code Playgroud)
这告诉编译器内容的*x将不会被修改.也就是说,在myfunc()你内部不能做到这样的事情:
strcpy(x, "foo");
Run Code Online (Sandbox Code Playgroud)
第二个示例,在C++成员函数上,意味着调用不会更改对象的内容.
所以给出:
class {
int x;
void myfunc() const;
}
Run Code Online (Sandbox Code Playgroud)
someobj.myfunc() 不允许修改以下内容:
x = 3;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
38177 次 |
| 最近记录: |