gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 12:49:38 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)用于类(class)和(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/49644035/

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