C++ 什么';类型(myVar)和类型(myVar)之间的区别是什么?
我将在cplusplus.com上阅读完整的教程,手动编写和编译每个示例。我经常会遇到让我困惑的事情 我目前正在学习此部分:。只有阅读本教程,一些微妙之处很容易被忽略。手工打字的优点是这些细节确实很突出 在上面的页面中,有两个示例程序。其中一条是这样的:C++ 什么';类型(myVar)和类型(myVar)之间的区别是什么?,c++,C++,我将在cplusplus.com上阅读完整的教程,手动编写和编译每个示例。我经常会遇到让我困惑的事情 我目前正在学习此部分:。只有阅读本教程,一些微妙之处很容易被忽略。手工打字的优点是这些细节确实很突出 在上面的页面中,有两个示例程序。其中一条是这样的: stringstream(mystr) >> yours.year; (stringstream) mystr >> pmovie->year; 另一条是这样的: stringstream(mystr) >
stringstream(mystr) >> yours.year;
(stringstream) mystr >> pmovie->year;
另一条是这样的:
stringstream(mystr) >> yours.year;
(stringstream) mystr >> pmovie->year;
我不明白的是type(myVar)=x代码>和(类型)myVar=x代码>
我不是按顺序完成整个教程。我查过了,但没有找到地址,尽管我可能没有找到
- 有区别吗李>
- 有没有一种比另一种更好的方法李>
你引用的页面并不是我一般认为C++上的权威。
反正
(stringstream)mystr>>pmovie->year
将std::string
强制转换为std::stringstream
对象。这是C风格的演员阵容。如果你不知道自己在做什么,那就相当危险了。这将创建一个stringstream
对象,并将值提取到pmovie->year
下一个
stringstream(mystr)>>yours.year
创建一个匿名std::stringstream
对象,并使用mystr
对其进行初始化,然后将值提取到pmovie->year
。对象在其词法范围的末尾消失,在本例中为代码>位于行的末尾
这两个w.r.t类对象之间没有太大的区别(正如其他人迄今所注意到的)
另一方面,对于(函数/宏的)标识符,这变得很棘手:function(myVar)=x无论函数
是实际函数还是宏,code>都可以工作。然而,(函数)(myVar)=x代码>仅适用于实函数
一些标准库标识符允许同时具有两种形式(最明显的是tolower
和friends),因此如果您希望始终调用函数,则应使用前者 类型(x)
和类型(x)
之间没有区别。这两者是完全等价的。大多数人喜欢类的type(x)
,喜欢非类的(type)x
,但这完全取决于自己的选择。这两个函数都为具有一个参数x
的类调用构造函数
类的首选方式是type(x)
,因为这允许向构造函数传递多个参数,如type(x,y)
中所述。尝试应用另一种形式时,(type)x,y
将不起作用:它强制转换x
,然后单独应用逗号运算符和evalutesy
。像(type)(x,y)
这样的括号没有帮助:这将使用逗号运算符单独计算x
和y
,然后将y
强制转换为type
对于非类类型,这样的强制转换通常过于强大。C++有“代码> STATICE-PRASE(X)
,用于大致做隐式转换的反向(如将基类转换为派生类,并将代码>空V*<代码>到另一指针),这通常是适合的。看
stringstream
不是一个函数。执行function(x)
会将其称为函数,但执行(function)x
是非法的,因为有两个表达式彼此相邻,中间没有运算符
对于那些不相信这个答案,并根据直觉否决它的人,请参考5.2.3/1
一个简单的类型说明符(7.1.5)后跟一个带括号的表达式列表,在给定表达式列表的情况下构造一个指定类型的值。如果表达式列表是单个表达式,则类型转换表达式与相应的强制转换表达式(5.4)等效(定义和定义)
它不是一个函数,而是一个类。第一个调用是构造函数调用,第二个调用是转换运算符调用?我一直在使用他们的参考资料。当然,这是个人意见。OP的问题就是一个很好的例子。你的回答表明两种形式之间存在差异,但没有详细说明这种差异。它还表明格式错误的表达式(function)myVar
是有效的(与(function)(myVar)
相反)。感谢您的回复。我很高兴我问了。我现在明白多了。关于CPLUS PLS.com:你推荐什么在线C++教程替代方案?我只是偶然发现了更完整的。我还使用cplusplus.com作为it标准库参考:。如果你知道一个更好的C++ STD库参考网站,请让我知道。作为参考:我更喜欢SGI STL网站和MSDN引用(尽管这些例子有时非常丑陋)。试着读一本书(写的东西)通常被认为是一个好的开始。@nico这不是一个意见的问题。该标准定义了什么是等效的,什么不是等效的。它将这两个定义为等价的,因此由编码风格决定在什么情况下使用什么。这不是神经科学:这些问题完全由标准规定,人们对语言的看法与语言的语义无关。很显然,你已经对这个问题下了决心,这是一个遗憾,但我不想改变它。我有更好的方法来消磨时间:)@nico哦,我在开玩笑。今天是星期天,是玩的时候了。但说真的,标准说两件事是等价的——我认为这是一个明确的说法。我看不出有什么可以解释的。如果您能展示一个代码示例,清楚地说明