这是代码(来自c ++中使用qt4的设计模式的介绍),在第9行,我猜QString(other)
给出了一个QString对象,但是这里初始化了什么?
#include <QList>
#include <QtAlgorithms> // for qSort()
#include <QStringList>
#include <QDebug>
class CaseIgnoreString : public QString {
public:
CaseIgnoreString(const QString& other = QString())
: QString(other) {} //
bool operator<(const QString & other) const {
return toLower() < other.toLower();
}
bool operator==(const QString& other) const {
return toLower() == other.toLower();
}
};
int main() {
CaseIgnoreString s1("Apple"), s2("bear"),
s3 ("CaT"), s4("dog"), s5 ("Dog");
Q_ASSERT(s4 == s5);
Q_ASSERT(s2 < s3);
Q_ASSERT(s3 < s4);
QList<CaseIgnoreString> namelist;
namelist << s5 << s1 << s3 << s4 << s2; /* Insert
all items in an order that is definitely not sorted. */
qSort(namelist.begin(), namelist.end());
int i=0;
foreach (const QString &stritr, namelist) {
qDebug() << QString("namelist[%1] = %2")
.arg(i++).arg(stritr) ;
}
QStringList strlist;
strlist << s5 << s1 << s3 << s4 << s2; /* The value
collection holds QString but, if you add CaseIgnoreString,
a conversion is required. */
qSort(strlist.begin(), strlist.end());
qDebug() << "StringList sorted: " + strlist.join(", ");
return 0;
}
答案 0 :(得分:1)
它不是成员的初始化,而是对基类初始化的显式调用。有关详细说明,请参阅Why explicitly call a constructor in C++。
答案 1 :(得分:0)
在此构造函数中
CaseIgnoreString(const QString& other = QString())
: QString(other) {} //
参数other的默认参数。如果用户不指定参数,则编译器将使用通过调用构造函数QString()创建的临时对象初始化参数。 此参数用于通过使用ctor初始化列表初始化CaseIgnoreString的基类
: QString(other)