const_cast和c样式转换(ObjectType)之间是否存在实际差异?
答案 0 :(得分:11)
A const_cast
传达有关C演员不能投射的意图的具体信息。
如果您不小心尝试将const_cast
用于添加或删除const
或volatile
以外的目的,编译器将帮助您输入错误消息。
此外,{C}风格演员不同,const_cast
是可搜索的。
答案 1 :(得分:4)
const_cast
只能添加或删除const
- ness(或volatile
- ness,尽管这种情况不太常见)。
C风格的演员阵容可以和任何“新”演员阵容一样,除了dynamic_cast
之外(它可以做一些他们都无法做到的事情,虽然它在这里并不真实相关)
答案 2 :(得分:2)
C ++中的C风格强制转换尝试静态强制转换,重新解释强制转换,常量强制转换或其组合。
建议避免C演员表主要是因为......
答案 3 :(得分:1)
同样的行动。 C风格的强制转换可以抛弃const。
const_cast的原因在于它可以作为一个可搜索的红旗,可以搜索并仔细审查/惩罚有罪者。这个想法是C ++比C更紧密。因此,如果不是不可能的话,故意违反类型系统(例如违反const正确性)很容易被发现。
完全不可能违反类型安全性会破坏过多的向后兼容性。
答案 4 :(得分:1)
const_cast
只能修改参数的 const-ness (或 volatile-ness ),而不是 basic 类型。所以
const T *tc = f();
volatile T *tv = g();
U *ua = const_cast<U*>(tc); //error
U *ub = const_cast<U*>(tv); //error
U *ub = (U*)(tc); //okay
U *ub = (U*)(tv); //okay
因此,c-style强制转换将符合条件的T*
修改为U*
而没有任何问题。
答案 5 :(得分:0)
const_cast受到更多限制,除了更改常量外,不会让你做任何其他事情。这使得它更安全,即不太容易发生事故。
此外,搜索更容易。