gpt4 book ai didi

c++ - 是否可以使用 const_cast 覆盖我的 const C++ 成员函数,返回一个指向内部非常量数组的 const 指针?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:08:37 29 4
gpt4 key购买 nike

我正在学习 C++ 并遇到了这个 const_cast 运算符。考虑以下示例:

class Test
{
private:
char name[100];
public:
Test(const char* n) { std::strncpy(name, n, 99); name[99]=0; }
const char* getName() const { return name; }
}

现在用户可以做

Test t("hi");
const_cast<char*>(t.getName())[0] = 'z'; //modifies private data...

这样好吗?我的意思是修改私有(private)数据,因为 return const char* 的目的是防止更改私有(private)数据。我该如何防止这种情况? (不使用 std::string)

最佳答案

不,这不是“很好”。虽然这是可能的。但是 C++ 并不强制程序员有良好的行为习惯。它主要允许您以显示其预期用途的方式声明事物。如果程序员决定绕过这种保护,他应该知道自己在做什么。

Bjarne Stroustrup:是的。那是新的强制转换语法。类型转换确实提供了一项基本服务。新语法是对 C 风格转换的改进,因为它允许编译器检查旧语法无法检查的错误。但是新语法是故意弄得丑陋的,因为转换仍然是一个丑陋且通常不安全的操作。

关于c++ - 是否可以使用 const_cast 覆盖我的 const C++ 成员函数,返回一个指向内部非常量数组的 const 指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6418582/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com