Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ stringstream object()和object之间的区别是什么?_C++ - Fatal编程技术网

C++ stringstream object()和object之间的区别是什么?

C++ stringstream object()和object之间的区别是什么?,c++,C++,在我的节目里我有 stringstream strumien(); //1 stringstream strumien; // 2 strumien<<"napis "<<8<<endl; stringstream strumien()//1. stringstream Struminen;//2. strumien看起来像函数声明的东西就是函数声明。就是 T name(); 声明一个名为name的函数,该函数不带任何参数,并返回一个T。这就是所谓的。有

在我的节目里我有

stringstream strumien(); //1
stringstream strumien;  // 2
strumien<<"napis "<<8<<endl;
stringstream strumien()//1.
stringstream Struminen;//2.

strumien看起来像函数声明的东西就是函数声明。就是

T name();
声明一个名为
name
的函数,该函数不带任何参数,并返回一个
T
。这就是所谓的。有两种可能的修复方法可以避免此问题:关闭括号或使用C++2011“统一初始化”(这是一个严重的误称):


第一行在形式语法中是不明确的:它可以解释为函数声明,也可以解释为带有无参数构造函数的对象的声明和实例化。该语言选择将其视为函数声明,因为可以放弃括号来调用无参数构造函数

第一行实际上是一个声明。即使它看起来和你的第二个一样,它也不是

所以

声明函数
名称
返回类型为
T
的对象

< C++标准陈述了这种歧义:

6.8歧义解决方案[stmt.ambig]

在涉及表达式语句和声明的语法中存在一种模糊性:将函数样式显式类型转换作为最左边子表达式的表达式语句与第一个声明符以(.开头的声明无法区分。在这些情况下,该语句是一个声明

这种模糊性也被称为模糊性


自从C++11以来,有一种新的方法来解决这个问题,它被称为

它的工作原理如下:

T name{};

第一个可能是MVP。它认为您正在声明一个不带参数并返回stringstream的函数。因此@Borgleader指的是仅供参考的函数。
T name();
T name{};