我将在cplusplus.com上完成完整的教程,手动编写和编译每个示例.我经常偶然发现让我感到困惑的事情.
我目前正在学习这一部分:http://www.cplusplus.com/doc/tutorial/structures/.只有阅读教程才能轻易忽略一些细微之处.手动输入所有东西的优点是这些细节确实很突出.
在上面的页面中,有两个示例程序.一个有这条线:
stringstream(mystr) >> yours.year;
Run Code Online (Sandbox Code Playgroud)
另一个有这条线:
(stringstream) mystr >> pmovie->year;
Run Code Online (Sandbox Code Playgroud)
我不明白的是type (myVar) = x;和之间的区别(如果有的话)(type) myVar = x;.
我没有按顺序执行整个教程.我查了但是没有找到这个地址,但我可能错过了它.
Joh*_*itb 56
type(x)和之间没有区别(type)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++ static_cast<type>(x)大致可以执行隐式转换(例如将基类转换为派生类并转换void*为另一个指针),这通常适用于.请参阅何时应使用static_cast,dynamic_cast和reinterpret_cast?.
stringstream但是,它不是一个功能.做function(x)会把它称为函数,但是做法(function)x是非法的,因为彼此相邻有两个表达式,中间没有运算符.
对于那些不相信这个答案的人,并在直觉上投票,请参考标准 5.2.3/1
简单类型说明符(7.1.5)后跟带括号的表达式列表,在给定表达式列表的情况下构造指定类型的值.如果表达式列表是单个表达式,则类型转换表达式与相应的强制转换表达式(5.4)等效(在定义中,如果在含义中定义).