通过引用传递空QString

Passing empty QString by reference

本文关键字:QString 引用      更新时间:2023-10-16

我有一个方法,它有这个签名

void SetFoo(QString& foo);

和我试图传递一个空字符串内联,但没有以下编译

SetFoo("");
SetFoo(QString(""));

(错误:没有匹配函数调用' MyClass::SetFoo(QString) ')

但是如果我像这样创建一个变量,它就可以工作了

QString emptyFoo = "";
SetFoo(emptyFoo);

有没有一种方法来调用方法而不显式地创建一个变量?

注意:在windows环境下使用vc++编译器似乎一切都工作,但我在linux环境下使用g++遇到上述编译错误。

您可以创建一个全局对象作为const QString nullStr(),并在任何地方使用它-有点类似于空对象模式。

或者,正如billz提到的,可以存在对临时的const引用,因此将其设置为const Qstring&将启用前两个版本

无论如何,如果您不打算修改它,您应该将引用更改为const Qstring&

要将引用绑定到临时对象,您需要const限定符,如果QString构造函数接受char*输入,请尝试:

void SetFoo(const QString& foo);

将过期变量的引用只传递给SetFoo是有意义的:

void SetFoo(QString& foo);
QString s;
SetFoo(s);

。注意:在windows环境下使用vc++编译器似乎一切都工作,但我在linux环境下使用g++遇到了上面提到的编译错误。

VisualStudio以其c++扩展而闻名(好或坏的方式),你的代码在VS上编译并不意味着它是c++标准。更好的方法是在编写代码时打开编译警告(级别4),它应该为绑定临时对象的引用提供警告。
还要查找c++标准,查找编译器手册,以确保您的代码可移植。