【发布时间】:2013-03-16 04:35:18
【问题描述】:
我写了一个小问题来检查 const 数据成员上 const_cast 的行为。
using namespace std;
class myString{
public:
myString(char * str)
{
p=str;
}
const char * getString(){
return p;
}
private:
const char *p;
} ;
int main()
{
char *p=(char*)malloc(8);
cin>>p;
myString *m= new myString(p);
char *s =const_cast<char*>(m->getString());
s[6]='y';
cout<<s<<endl;
return 0;
}
运行此程序后,我将输出为“yogendra”(一个 8 个字母的字符串)。我得到的输出是“yogendya” 现在我的怀疑。通过 const_cast 我们可以覆盖数据成员本身的行为,因为这里的字符串是 const char* 在转换之后我仍然可以修改它。
【问题讨论】:
-
这是您通常应该编写代码以便不需要任何 const_cast 的原因之一。代码中多次出现 const_cast 表明应用程序的设计存在问题(尽管它也有有效的用途,但有时也无法避免)。
-
@PeterWood:除了没有为输入分配足够的内存之外,这里的未定义行为在哪里?可以修改
const对象,但本示例中没有const对象。 -
@PeterWood 链接到标准? C++ 中的 AFAIK 抛弃 const 仅适用于多线程环境或不可变数据(例如文字)的 UD。手动添加 const 然后将其丢弃应该是无操作的(尽管几乎不合理)
-
@MikeSeymour Mea 过失
标签: c++ const-cast