字符串流对象()和对象之间的区别是什么
What is the difference between stringstream object() and object?
在我的程序中,我有
stringstream strumien(); //1
stringstream strumien; // 2
strumien<<"napis "<<8<<endl;
并且第一行生成以下错误
类型"std::stringstream()"的无效操作数{akastd::basic_stringstream()}'和'const-char[7]'转换为二进制'运算符<lt;'
但第二种方法效果良好。(当然,其中总是有一个被评论掉)
那么它们之间有什么区别呢?因为我一直认为它们是物体的平等定义。
看起来像函数声明的东西就是函数声明。那是
T name();
声明了一个名为name
的函数,该函数不接受任何参数并返回一个T
。这被称为最Vexing解析。有两个潜在的解决方案可以避免这个问题:去掉括号或使用C++2011"统一初始化"(这是一个严重的误称):
T name{};
第一行实际上是一个声明。即使它看起来和你的第二个一样,它也不是。。。
所以
T name();
声明函数name
返回类型为T
的对象。
C++标准规定了这种模糊性:
6.8模糊度分辨率[stmt.ambig]
在涉及表达式语句和声明的语法中存在歧义:以函数式显式类型转换作为其最左边子表达式的表达式语句可能与第一个声明符以(.开头的声明无法区分。在这些情况下,该语句是一个声明
这种模糊性也被称为"最模糊解析"。
自从C++11以来,有一种新的方法可以解决这个问题,它被称为统一初始化语法。
它的工作方式如下:
T name{};
第一行在形式语法中是不明确的:它可以被解释为函数声明,也可以被解释为由无arg构造函数的对象的声明和实例化。该语言选择将其视为函数声明,因为可以放弃圆括号来调用无参数构造函数。
相关文章:
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- 构造对象 c++ (cocos2d-x) 时的区别
- C++ 对非常量对象的常量引用和对非常量对象的非常量引用之间的区别
- 类型测试对象的动态数组的这两个声明之间的区别?
- 这些情况有什么区别?我怎么知道什么是临时对象?
- 迭代器和标量对象之间的未定义行为有什么区别吗?
- 在C++中初始化带有和不使用构造函数调用的对象有什么区别
- C++ 中的对象创建类型有什么区别?
- 通过引用传递对象和基元之间的区别
- 让一个名为A的类.传递以下两个对象有什么区别:(a)obj1和(b)obj1()
- 构造对象时 c++ 中的括号和大括号有什么区别
- 在 c++ 中将结构的每个成员写入文件和将结构对象直接写入文件之间有什么区别吗?
- C++ std::vector 创建对象然后添加对象与在向量中创建对象之间的区别?
- 返回本地静态的函数和返回静态成员的函数之间有什么区别(对象大小、性能等)?
- (类 *对象;)和(object = new class();)之间有什么区别
- 通过值和参考,对象构建返回对象之间的区别
- 构建对象的方法之间有什么区别
- 声明静态对象和指向静态对象的指针之间的区别
- 对象和实例之间的区别:C++
- 我创建的c++istream对象和cin之间的区别在哪里,它在库中的可见位置在哪里