除了换档,<< C++操作员还做什么?
What does the << C++ operator do, other than shifting?
我在一个Qt示例中看到一个c++代码片段,其中包含一些<<操作符。我知道位移位,但很明显,这些做别的事情:
在这个链接:http://qt-project.org/doc/qt-4.8/itemviews-simpletreemodel-treemodel-cpp.html中有一些代码如下所示:
void TreeModel::setupModelData(const QStringList &lines, TreeItem *parent)
{
QList<TreeItem*> parents;
QList<int> indentations;
parents << parent;
indentations << 0;
// ...
操作符在最后两行做什么:parents <<和缩进<<0
我在谷歌上搜索了一下,但总是找到关于移位运算符的页面。
这是否与特殊形式的赋值有关?
找到答案的最简单方法是查看操作符应用于哪些类型。左操作数是QList<TreeItem*>
,右操作数是TreeItem*
。这应该会给你提示去查找QList
的文档。
在文档中,您可以找到operator<<
的规范:
QList<T> & QList::operator<< ( const T & value )
这是一个重载函数。
将值附加到列表中。
因此,其中T
是QList
中元素的类型,即TreeItem*
, operator<<
的重载获取对T
的引用并将其添加到列表中。
这应该与用于插入输出流的比喻一致,例如std::cout << "Hello!";
。也就是说,它通常被认为是一个插入操作符。另一方面,operator>>
通常用于提取。然而,它在这里只是用作语法糖。
使c++多态更强大(有时被认为是误用)的一些原因是操作符重载,它允许您为语言中包含的一些通用操作符(如+, -, <<,
等)提供自定义实现。
例如:
std::ostream& operator << (std::ostream &out, RationalNumber &fraction)
{
return out << fraction.getNumerator() << "/" << fraction.getDenominator();
}
bool RationalNumber::operator == ( const RationalNumber & right )
{
return (this->Numerator == right.Numerator && this->Denominator == right.Denominator ? true:false);
}
正如你可能看到的那样,这让我可以在操作符内做任何我想做的事情,包括与它的初始含义无关的事情。从我所读到的内容来看,这就是为什么Java中没有包含这样一个工具的原因。
在c++中,可以重载操作符。所以& lt; & lt;Operator依赖于您在Operator重载上定义的其他内容。对于>>、+、-等其他操作符也是一样的
;<在QList>在QList>
中被覆盖来自QT参考手册:
**QList<T> & QList::operator<< ( const QList<T> & other )**
Appends the items of the other list to this list and returns a reference to this list.
See also operator+=() and append().
**QList<T> & QList::operator<< ( const T & value )**
This is an overloaded function.
Appends value to the list.
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 警告处理为错误这里有什么问题
- 什么时候调用组成单元对象的析构函数
- #定义c-预处理器常量..我做错了什么
- 努力将整数转换为链表。不知道我在这里做错了什么
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 什么时候在C++中返回常量引用是个好主意
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- C++避免重复声明的语法是什么
- c++库的公共头文件中应该包含什么
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- ifstream什么都没读
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 什么是模板&lt;&gt;inline bla bla
- &lt;&lt;&lt;的这些超载有什么区别操作员
- 这是做什么的?如果(无符号(dx) & lt;无符号(大小))
- 什么会导致死亡<<变量& lt; & lt;“ t";当输出超过终端宽度时,打印空白而不是值