在线文档教程
C++
语言 | Language

const_cast conversion

康斯特[医]铸造转换

在具有不同cv限定条件的类型之间进行转换。

句法

const_cast < new_type > ( expression )

返回类型的值。new_type...

解释

只有以下转换可以使用const_cast特别是,只有const_cast可用于丢弃%28删除%29的稳定性或波动性。

1%29两个可能是多层指针的相同类型的指针可以相互转换,而不考虑每个级别的cv-限定符。

任何类型的2%29升T可以转换为同类型的lvalue或rvalue引用。T,或多或少符合简历的条件。同样,rvalue可以转换为或多或少cv限定的rvalue引用.。引用的结果const_cast如果表达式是glvalue,则引用原始对象,并引用物化临时否则,%28自C++17%29。

3%29相同的规则适用于数据成员的可能多级指针,可能的多级指针适用于已知和未知绑定%28数组的数组,到cv限定元素的数组被认为是cv-限定自身%29%28,因为C++17%29。

4%29空指针值可转换为新的空指针值。[医]类型

与所有强制转换表达式一样,结果是:

  • 如果是新的[医]类型是lvalue引用类型或函数类型的rvalue引用;

  • 如果是新的xvalue[医]类型是对对象类型的rvalue引用;

  • 要价不一样。

注记

指向函数的指针和指向成员函数的指针不受const_cast...

const_cast使之能够形成一个引用或指针,该引用或指针指向实际引用的非Const类型。Const对象或指向非易失性类型的引用或指针,该引用或指针实际上是指挥发性物体通过非const访问路径修改const对象,并通过非易失性引用易失性对象。极值导致行为不明。

关键词

const_cast...

二次

#include <iostream> 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; }; int main() { int i = 3; // i is not declared const const int& cref_i = i; const_cast<int&>(cref_i) = 4; // OK: modifies i std::cout << "i = " << i << '\n'; type t; // note, if this is const type t;, then t.m1(4 is UB t.m1(4 std::cout << "type::i = " << t.i << '\n'; const int j = 3; // j is declared const int* pj = const_cast<int*>(&j // *pj = 4; // undefined behavior! void (type::*mfp)(int) const = &type::m1; // pointer to member function // const_cast<void(type::*)(int)>(mfp // compiler error: const_cast does not // work on function pointers }

二次

产出:

二次

i = 4 type::i = 4

二次

另见

  • 静态[医]铸造

  • 动态[医]铸造

  • 重释[医]铸造

  • 显式铸造

  • 隐式转换

© cppreference.com

在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。

http://en.cppreference.com/w/cpp/language/const[医]铸造