关于cppReference中的const_cast用法
About const_cast usage in cppreference
请参阅此页面,然后转到示例。这是关于
使用的演示struct type {
type() :i(3) {}
void m1(int v) const {
// this->i = v; // compile error: this is a pointer to const
const_cast<type*>(this)->i = v; // OK as long as the type object isn't const
}
int i;
};
const 这意味着M1无法修改类型的成员变量。我不明白为什么const_cast修改了 this 的constness。我的意思是,此指针指向当前类型对象,而不是i本身。
为什么不:
const_cast<int>((this)->i) = v;
我可以说,当成员函数之一使用 const 限定符时,整个对象和所有成员变量变为 const ?为什么此是const指针?
我不明白为什么const_cast修改了此
的constness
不是。您可以说它会创建另一个临时指针,这不是指向const type
的指针,而是与this
相同的地址。然后,它使用该指针访问i
。
为什么不
const_cast<int>((this)->i)
您可以做类似的事情,但是您需要铸造参考,而不是普通整数。
const_cast<int&>(i) = v; // this-> omitted for brevity
相同的警告适用于i
的任何修改,如果this
点点位于真正 const。
我可以说,当成员函数之一使用const修饰符时,整个对象和所有成员变量变为const?为什么这是const指针?
是。成员函数上的const预选赛表示this
的Pointee类型为type const
。所有成员(不可变形)也是通过this
的任何访问。
相关文章:
- 如何理解C++标准N3337中的expr.const.cast子句8
- C++Cast运算符过载
- 这个指针在c++中的用法
- 当C++中需要自动删除时,这是静态的正确用法吗?
- libstdc++ 文件系统中未初始化的用法?
- 复制和交换习惯用法与移动操作之间的交互
- 类作用域的类型别名"using":[何时]方法中的用法可以先于类型别名?
- 命名参数习惯用法和(抽象)基类
- 省略号在C++中的所有用法
- () 在 C++ 11 中的特殊而奇怪的用法?
- 构造函数的用法
- 模板类中自动的类用法不完整
- 这里的 = 运算符有什么用法?
- 什么模板用法在阶乘中更好
- 如果可变长度元素的constexpr用法得到<>
- 为什么 setjmp/longjmp 的这种用法是未定义的行为?
- 访问提升:shared_ptr 主范围外崩溃,断言失败:px != 0.指针的正确用法是什么?
- C++ 中函数中 Const 用法之间的差异
- 错误:"cast"未命名类型void setCastDescription(std::string
- equal_to模板类C++用法