在C ++中,is(int)ch等价于int(ch)。
如果没有,有什么区别?
答案 0 :(得分:19)
它们是同一个东西,也与(int)(ch)
相同。在C ++中,通常首选使用命名演员来阐明您的意图:
static_cast
在不同大小或签名的原始类型之间进行投射,例如static_cast<char>(anInteger)
。dynamic_cast
将基类向下转换为派生类(仅限多态类型),例如: dynamic_cast<Derived *>(aBasePtr)
。reinterpret_cast
在不同类型的指针之间或指针与整数之间进行转换,例如reinterpret_cast<uintptr_t>(somePtr)
。const_cast
从变量中删除const
或volatile
限定符(非常危险),例如const_cast<char *>(aConstantPointer)
。答案 1 :(得分:10)
int(x)
被标准称为函数样式,并且在各个方面都与C样式相同(对于POD)[5.2.3]:
如果表达式列表是单个表达式,则类型转换表达式与相应的强制转换表达式(5.4)等效(在定义中,如果在意义上定义)。
答案 2 :(得分:3)
他们是一样的。
答案 3 :(得分:3)
Konrad Rudolph是对的。但请考虑一下
答案 4 :(得分:2)
尽管两种语法对于int具有相同的含义,但第二种构造函数样式的语法更为通用,因为它可以与模板中的其他类型一起使用。也就是说,“T(x)”可以编译成基本类型之间的转换(例如,如果T = int)或构造函数调用(如果T是类类型)。根据我自己的经验,这是一个有用的例子,当我从使用本机类型进行计算的中间结果切换到任意精度的整数时,它们被实现为一个类。
答案 5 :(得分:1)
第一种是C风格,第二种是C ++风格。
在C ++中,使用C ++样式。
答案 6 :(得分:1)
值得注意的是,在C ++中不推荐使用这两种类型的转换,而是赞成Adam Rosenfield的答案中列出的更长,更具体的转换方法。
答案 7 :(得分:-1)
如果你想变得非常讨厌,那么如果你写的东西如下:
#define int(x) 1
然后(int)x具有您期望的含义,而对于任何x值,int(x)将为1。但是,如果有人这样做过,你应该伤害他们。我也完全相信,在#defining关键字中禁止使用标准,但我现在无法找到它。
除此之外,非常愚蠢,特殊情况,如前所述[5.3.2]表示它们与POD相同