gpt4 book ai didi

c++ - type(myVar) 和 (type)myVar 有什么区别?

转载 作者:IT老高 更新时间:2023-10-28 22:22:51 26 4
gpt4 key购买 nike

我正在 cplusplus.com 上阅读完整的教程,手动编码和编译每个示例。我经常会偶然发现一些让我感到困惑的事情。

我目前正在学习这个部分:http://www.cplusplus.com/doc/tutorial/structures/ .仅阅读本教程很容易忽略一些细微之处。手动输入所有内容的好处是这些细节确实很突出。

在上面的页面中,有两个示例程序。有这一行:

stringstream(mystr) >> yours.year;

另一个有这样一行:

(stringstream) mystr >> pmovie->year;

我不明白的是 type (myVar) = x;(type) myVar = x; 之间的区别(如果有的话)。

我没有按顺序完成整个教程。我查了一下,但没有找到这个地址,虽然我可能错过了。

  • 有区别吗?
  • 有没有一种首选的方法来做这件事而不是另一种?

最佳答案

type(x) 没有区别和 (type)x .这两个是完全等价的。大多数人更喜欢type(x)上课和(type)x对于非类类型,但这完全取决于自己的选择。两者都调用具有一个参数的类的构造函数 x .

类的首选方式是type(x) ,因为这允许向构造函数传递多个参数,如 type(x, y) .尝试应用另一种形式,(type)x, y不起作用:它强制转换 x , 然后应用逗号运算符并计算 y隔离中。括号如 (type)(x, y)不帮助:这将评估 xy单独使用逗号运算符,然后强制转换 ytype .

对于非类类型,这样的强制转换通常过于强大。 C++ 有 static_cast<type>(x)用于大致执行隐式转换的逆向(例如将基类转换为派生类并将 void* 转换为另一个指针),这通常是适合的。参见 When should static_cast, dynamic_cast and reinterpret_cast be used? .

stringstream不过,它不是一个函数。做function(x)将调用它的函数,但做 (function)x是非法的,因为有两个相邻的表达式,中间没有运算符。


对于那些不相信这个答案,并在直觉上投反对票的人,请在 5.2.3/1 上查阅标准

A simple-type-specifier (7.1.5) followed by a parenthesized expression-list constructs a value of the specified type given the expression list. If the expression list is a single expression, the type conversion expression is equivalent (in definedness, and if defined in meaning) to the corresponding cast expression (5.4).

关于c++ - type(myVar) 和 (type)myVar 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3484371/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com