我看到这个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
部分是明确的。如果我提出更多细节,请告诉我。
答案 0 :(得分:2)
const_cast
仅用于将指针上的const或volatile限定符修改为相同类型。您不能使用它来在不相关的指针类型之间进行转换。 long int *
是指向不同于int*
的对象类型的指针,因此const_cast
将是格式错误的。这样做很好,因为在做那样冒险的事情时你不应该意识到这一点。
c-style演员几乎可以不惜任何代价进行转换。它是一种生硬的工具,很少考虑类型系统。 C ++为不同场景引入不同类型的演员表的全部原因是为了避免这种情况,并且不惜一切代价进行投射。行为。在铸造时给予程序员控制和精确度。