我正在浏览 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)
没有帮助:这将评估 x
和 y
使用逗号运算符隔离,然后转换 y
至 type
.
对于非类类型,这样的转换往往过于强大。 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/