C++ 什么';类型(myVar)和类型(myVar)之间的区别是什么?

C++ 什么';类型(myVar)和类型(myVar)之间的区别是什么?,c++,C++,我将在cplusplus.com上阅读完整的教程,手动编写和编译每个示例。我经常会遇到让我困惑的事情 我目前正在学习此部分:。只有阅读本教程,一些微妙之处很容易被忽略。手工打字的优点是这些细节确实很突出 在上面的页面中,有两个示例程序。其中一条是这样的: stringstream(mystr) >> yours.year; (stringstream) mystr >> pmovie->year; 另一条是这样的: stringstream(mystr) >

我将在cplusplus.com上阅读完整的教程,手动编写和编译每个示例。我经常会遇到让我困惑的事情

我目前正在学习此部分:。只有阅读本教程,一些微妙之处很容易被忽略。手工打字的优点是这些细节确实很突出

在上面的页面中,有两个示例程序。其中一条是这样的:

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
,然后单独应用逗号运算符和evalutes
y
。像
(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哦,我在开玩笑。今天是星期天,是玩的时候了。但说真的,标准说两件事是等价的——我认为这是一个明确的说法。我看不出有什么可以解释的。如果您能展示一个代码示例,清楚地说明