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

标签 c++

我正在浏览 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/

相关文章:

c++ - 快速而肮脏的运营商!=

c++ - 在可变大小的四边形上包装纹理坐标?

c++ - 如何在预处理器中检测 "Use MFC"

c++ - 套索线选择

c++ - 如何打印中间包含 0 字符的字符串?

c++ - va_start 作为数组

c++ - C++ 标准库在任何时候都包含每个平台的 native 头文件吗?

c++ - 是否有与 memmove 等效的标准库?

c++ - 是否使用空 std::optional<string> UB?

c++ - 动态和静态访问 C++ 结构中的成员