(int)ch与int(ch):同一事物的语法是否不同? 在C++中,IS(int)等于int(CH)。

(int)ch与int(ch):同一事物的语法是否不同? 在C++中,IS(int)等于int(CH)。,c++,casting,C++,Casting,如果不是,有什么区别? < P>第一种是C风格,第二种是C++风格。 在C++中,使用C++风格。它们是相同的。< P>它们是相同的,也与(int)(CH)< /C>相同。在C++中,通常使用命名的CAST来阐明您的意图: 使用static\u cast在不同大小或符号的基本类型之间进行转换,例如static\u cast(一个整数) 使用dynamic\u cast将基类向下转换为派生类(仅限多态类型),例如dynamic\u cast(abaseptor) 使用reinterpret\u


如果不是,有什么区别?

< P>第一种是C风格,第二种是C++风格。
在C++中,使用C++风格。

它们是相同的。

< P>它们是相同的,也与<代码>(int)(CH)< /C>相同。在C++中,通常使用命名的CAST来阐明您的意图:

  • 使用
    static\u cast
    在不同大小或符号的基本类型之间进行转换,例如
    static\u cast(一个整数)
  • 使用
    dynamic\u cast
    将基类向下转换为派生类(仅限多态类型),例如
    dynamic\u cast(abaseptor)
  • 使用
    reinterpret\u cast
    在不同类型的指针之间或指针与整数之间进行转换,例如
    reinterpret\u cast(somePtr)
  • 使用
    const\u cast
    删除变量(非常危险的
    限定符)中的
    const
    volatile
    限定符,例如
    const\u cast(acontstantpointer)
int(x)
被标准称为功能样式转换,在各个方面与C样式转换相同(对于POD)[5.2.3]:

如果表达式列表是单个表达式,则类型转换表达式与相应的强制转换表达式(5.4)等效(定义和定义)


如果你想变得非常讨厌,那么如果你写了这样的东西:

#define int(x) 1
然后(int)x具有您期望的含义,而int(x)对于x的任何值都是1。然而,如果有人这样做,你可能会伤害他们。我也很相信,在标准的某个地方,你被禁止定义关键词,尽管我现在找不到


除此之外,非常愚蠢的特殊情况,如前所述,[5.3.2]表示它们对于POD是相同的

尽管这两种语法对于int的含义相同,但第二种构造函数样式的语法更通用,因为它可以与模板中的其他类型一起使用。也就是说,“T(x)”可以编译成原语类型之间的转换(例如,如果T=int)或构造函数调用(如果T是类类型)。根据我自己的经验,这是一个有用的例子,当我从使用本机类型进行中间计算结果转换为任意精度整数时,它们被实现为一个类。

Konrad Rudolph是正确的。但是考虑一下


  • (int)x值得注意的是,两种风格的铸造都在C++中被贬低,有利于Adam Rosenfield的答案中列出的更长、更具体的铸造方法。< / P>可以说C++风格实际上是静态的(CH)。但是那更冗长:更真实。在分析代码时搜索问题也容易得多。当人们说不要对内置类型使用函数类型转换,但却非常乐意对用户类型使用1-arg构造函数时,我感到困惑,尽管它们完全是一样的。要么遵循推理得出逻辑结论,要么根本不遵循-p@onebyone:不,UDT仍然有一个关键区别:您知道将调用构造函数。对于基本数据类型,您无法确定;您可以触发一个
    重新解释强制转换
    或丢弃
    常量
    ,而无需执行此操作。不太好。也就是说,我通常使用
    static\u cast
    。它们可能是-但根据标准,它们不能保证是相同的。事实上,5.2.3同意我的观点;对于单个表达式,它是“等效的”,但不是“相同的”;对于更复杂的表达式,它可能是“相同的”,也可能不是“相同的”,因此“等效”和“相同的”等效、相同或相同?重新解释也是非常危险的。如果小心的话,您至少可以有效地取消引用常量强制转换指针,但对于重新解释的指针,您唯一可以有效地执行的操作是稍后将其重新转换回原始类型。哦,我想你可以安全地比较一下……同样的行为可以通过使用
    静态\u cast
    实现。正如亚当所说,澄清意图对于这些危险的行动非常重要。不需要使用更危险的函数样式转换。这是一个很好的说明。基本类型和指针的函数样式转换完全等同于C中的通用转换,这是不安全的,因为您可以损坏指针或绕过“const”和“volatile”提供的保护。