【问题标题】:Is there a difference between int(floatvar) and (int)floatvar? [duplicate]int(floatvar) 和 (int)floatvar 之间有区别吗? [复制]
【发布时间】:2010-12-21 09:44:01
【问题描述】:

可能重复:
C++: What's the difference between function(myVar) and (function)myVar ?

我已经看到并使用了这些类型转换的两种变体:

int(floatvar)

(int)floatvar

这两者有什么区别吗?对于何时使用哪个有任何偏好吗?

【问题讨论】:

  • 我删除了 C 标签,因为这是一个仅限 C++ 的问题。第一个变体在 C 中是不相关的,除非你想用参数“floatvar”调用一个名为“int”的函数?

标签: c++ language-features typecast-operator


【解决方案1】:

它们之间没有区别。 (int)floatvar 是进行强制转换的 C 方式,而 int(floatvar) 是 C++ 方式(尽管最好明确并使用 static_cast<>)。

【讨论】:

  • 读者可能还想知道为什么要引入它。
【解决方案2】:

不,是一样的。

无论如何,对于 C++ cast static_cast 是更可取的。

【讨论】:

    【解决方案3】:

    该表示法对任何类型都是通用的,您可以使用 int 进行表示,这意味着它可以在模板中使用。

    template < typename T, typename U >
    T makeTFromU( U u )
    {
       return T( u );
    }
    

    好的,这是一个显示点的非常简单的情况,但即使 T 是 int 并且 U 是可以转换为 int 的类型,它也可以工作。

    标准库中的一个例子是向量。如果您使用此构造函数,它会从参数构造一个元素,而其他元素则通过第一个构造函数的复制构造函数构造。

    std::vector< int > v( 20, x );
    

    因此它可能会在内部调用 int(x) 来创建第一个然后复制到 20 个元素中。

    【讨论】:

      猜你喜欢
      • 2013-07-01
      • 1970-01-01
      • 2010-11-18
      • 1970-01-01
      • 2017-10-17
      • 2017-06-20
      • 1970-01-01
      • 1970-01-01
      • 2020-03-01
      相关资源
      最近更新 更多