键入(变量)vs(Type)变量

Sam*_*ade 3 c++ casting type-conversion implicit-conversion

可能重复:(
类型)值和类型(值)之间有什么区别?

我主要是一个C#开发人员,因此使用以下语法进行大量显式转换:(type)variable以with (int)100.0004d为例.因此,在用C++编写代码时,我经常使用相同的语法.然而,我看到(甚至使用)在同样的铸造是使用语法实现其他情况下的代码type(variable)int(100.0004)作为一个例子.

我很好奇这两种方法之间的区别是什么,以及使用一种方法是否有任何影响.

例:

double someDouble = 100.00456;

// Cast the double using the (type)variable syntax
int firstCastValue = (int)someDouble;

// Cast the double using the type(variable) syntax
int secondCastValue = int(someDouble);
Run Code Online (Sandbox Code Playgroud)

Ker*_* SB 8

两者完全相同,任何类型都是如此.

就个人而言,我会避免第一种形式,(T)x支持显式静态转换:

y = static_cast<T>(x);
Run Code Online (Sandbox Code Playgroud)

这表示您要转换 x为该类型T.

第二种形式更像是构造函数调用的召唤,有时候更可取:

v = std::vector<int>(10);  // not: v = static_cast<std::vector<int>>(10)
Run Code Online (Sandbox Code Playgroud)

重复一遍,两种形式完全相同,这是你喜欢的品味问题.我会使用静态强制转换"转换"和构造函数语法"构造",如果这有任何意义.

  • @Kos:两个中只有一个.`foo`可以从`arg`构造,*或*`arg`有一个转换运算符到`Foo`.如果两者都被定义,那么它是模棱两可的. (3认同)