看看这段非常简单的代码:
struct A { char* s; };
class B
{
A* a;
public: B(const char* s) : a(new A()) {
int len = strlen(s);
a->s = new char[len + 1];
memcpy(a->s, s, len + 1);
}
~B() { delete [] a->s; delete a; }
const char* c_str() const { return a->s; }
const B& to_upper() const {
char* x = a->s;
int len = strlen(x);
for (int i = 0; i < len; i++)
{
char k = x[i];
if (k >= 'a' && k <= 'z')
x[i] -= 32;
}
a->say_hi();
return *this;
}
};
int main() {
B b = "hola mundo";
printf("%s\n", b.to_upper().c_str());
}
有用!!我的问题是……为什么?
to_upper() 方法是 const 并通过“a”修改值指针。好的,我无法执行“a = nullptr;”之类的操作 因为编译器说:“您正在尝试修改只读对象”;但它可以让我修改基础值。这种行为正确吗?不应该像const方法中将“this”的类型转换为“const B*”一样将“a”类型转换为“const A*”吗?
谢谢!