Ton*_*ion 2 c++ const function member
我正在阅读一本名为"Effective C++,Second Edition"的书,以及它关于const成员函数以及你如何具有逐位常量和概念常数的讨论.
它说大多数编译器都会使用按位常量,这是因为你无法改变const成员函数内对象的数据成员.
然后是一个成员函数的例子,它似乎在const测试中没有按位.
它是这样的:
#include "stdafx.h"
#include <string>
#include <iostream.h>
using namespace std;
class mystring
{
public:
mystring(const char* value);
operator char *() const { return data; }
private:
char * data;
};
mystring::mystring(const char * value)
{
mystring::data = const_cast<char*>(value);
}
int main(int argc, char* argv[])
{
const mystring s = "Hello";
char * nasty = s;
*nasty = 'M';
printf("s: %c", s);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当它运行时,它在我的书中说它应该允许你改变它的值s,即使它const.这是因为char*数据指向的const char*值与指向的值相同. *data在这种情况下不是const.
但是,尝试在MS VC++ 6.0中运行它,它会在行引发访问冲突 *nasty = 'M';
有人可以解释发生了什么吗?我想我错过了什么?
对我来说,似乎因为我们有一个const mystring s,我们不应该改变它,但是它在书中所说的内容似乎很尴尬.
小智 7
访问冲突是因为您尝试更改字符串文字.您的代码相当于:
char * p = "Hello";
* p = 'M';
Run Code Online (Sandbox Code Playgroud)
这在C和C++中都是非法的 - 与const成员函数无关.
| 归档时间: |
|
| 查看次数: |
1529 次 |
| 最近记录: |