首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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...

二次

代码语言:javascript
复制
#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
}

二次

产出:

二次

代码语言:javascript
复制
i = 4
type::i = 4

二次

另见

  • 静态[医]铸造
  • 动态[医]铸造
  • 重释[医]铸造
  • 显式铸造
  • 隐式转换
代码语言:txt
复制
 ? cppreference.com

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

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com