繁体   English   中英

const_cast用于引用和指针

[英]const_cast for references and pointers

我看到这篇文章解释了const_cast<>并说使用指针/引用是有益的。 但是,请考虑以下代码:

1-

const_cast<SCOTCH_Num*>(xadj)

invalid const_cast from type 'cost label* {aka const long int *}' to type 'SCOTCH_Num* {aka int*}' 因此,指针被强制转换。 不是吗

2

(SCOTCH_Num*)(xadj)

我得到warning: use of old-style cast [-Wold-style-cast]

您可能会询问变量定义,但错误中的aka部分很明显。 如果我有更多建议,请告诉我。

const_cast仅用于修改指向相同类型的指针的const或volatile限定符。 您不能使用它在不相关的指针类型之间进行转换。 long int *是指向不同于int*的对象类型的指针,因此const_cast将不正确。 那样很好,因为在进行类似冒险的事情时,您不应被不知所措。

C样式的转换几乎可以进行任何转换。 这是一个钝器,很少关注类型系统。 C ++针对不同情况引入不同类型的强制转换的全部原因是为了避免这种“不惜一切代价进行转换”的行为。 这是为了让程序员在投射时可以控制和精确。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM