const_cast conversion

来自cppreference.com
< cpp‎ | language

 
 
C++语言
表达式
替代表示
字面量
布尔型 - 整型 - 浮点型
字符型 - 字符串 - nullptr (C++11)
用户定义 (C++11)
Utilities
属性 (C++11)
Types
typedef声明
类型别名声明 (C++11)
Casts
隐式类型转换 - 显示类型转换
static_cast - dynamic_cast
const_cast - reinterpret_cast
内存分配
类特有的函数属性
explicit (C++11)
static
静态成员函数
模板
杂项
 

提供同一类型,不同的const、volatile限定符之间的转换.

目录

[编辑] 语法

const_cast < new_type > ( expression )

返回new_type类型的值.

[编辑] 解释

const_cast操作只适用于下列类型间的转换。尤其是,只有const_cast才可以把const、volatile修饰的类型转换为普通类型.

1) 对于两个相同类型的多级指针,如果它们仅仅在某些级别上的const、volatile修饰符不同,就可以互相转换.
2) 任何类型T的左值可以被被转换到一个相同类型T,但const、volatile修饰符不相同的左值或右值引用。同样地,一个右值也可以转换成一个const、volatile修饰符不相同的右值引用.
3) 此规则也同样适用于多级指针.
4) 空指针值可转换为new_type的空指针值.
与所有的强制转换表达式,其结果是:
原文:
As with all cast expressions, the result is:
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
  • 如果一个左值new_type是一个左值引用类型或一个右值引用为函数类型
    原文:
    an lvalue if new_type is an lvalue reference type or an rvalue reference to function type;
    这段文字是通过 Google Translate 自动翻译生成的。
    您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
  • 值为xValue,如果new_type是一个右值引用的对象类型
    原文:
    an xvalue if new_type is an rvalue reference to object type;
    这段文字是通过 Google Translate 自动翻译生成的。
    您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
  • 一个prvalue否则.
    原文:
    a prvalue otherwise.
    这段文字是通过 Google Translate 自动翻译生成的。
    您可以帮助我们检查、纠正翻译中的错误。详情请点击这里

[编辑] 注释

const_cast不适用于函数指针和成员函数指针.

虽然const_cast可以去除任何指针的const限制,但如果通过转换后的指针或引用来改写一个const对象,依然可能导致未定义的意外行为.

[编辑] 关键字

const_cast

[编辑] 示例

#include <iostream>
 
struct type {
    type() :i(3) {}
    void m1(int v) const {
        // this->i = v;                 // 编译错误: this是一个const指针
        const_cast<type*>(this)->i = v; // 可行
    }
    int i;
};
 
int main() 
{
    int i = 3;                    // 此处的i不是const类型
    const int& cref_i = i; 
    const_cast<int&>(cref_i) = 4; // 可行: 修改了i的值
    std::cout << "i = " << i << '\n';
 
    type t;
    t.m1(4);
    std::cout << "type::i = " << t.i << '\n';
 
    const int j = 3; // j是const类型
    int* pj = const_cast<int*>(&j);
    *pj = 4;         // 改写const变量的值,可能会导致意外情况发生!
 
    void (type::*mfp)(int) const = &type::m1; // 成员函数指针
//  const_cast<void(type::*)(int)>(mfp); // 编译错误: const_cast不能用于函数指针
}

输出:

i = 4
type::i = 4

[编辑] 另请参阅