const_cast用于引用和指针

时间:2018-02-05 13:37:56

标签: c++ pointers casting

我看到这个post解释了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部分是明确的。如果我提出更多细节,请告诉我。

1 个答案:

答案 0 :(得分:2)

const_cast仅用于将指针上的const或volatile限定符修改为相同类型。您不能使用它来在不相关的指针类型之间进行转换。 long int *是指向不同于int*的对象类型的指针,因此const_cast将是格式错误的。这样做很好,因为在做那样冒险的事情时你不应该意识到这一点。

c-style演员几乎可以不惜任何代价进行转换。它是一种生硬的工具,很少考虑类型系统。 C ++为不同场景引入不同类型的演员表的全部原因是为了避免这种情况,并且不惜一切代价进行投射。行为。在铸造时给予程序员控制和精确度。