通过引用传递空QString
Passing empty QString by reference
我有一个方法,它有这个签名
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++标准,查找编译器手册,以确保您的代码可移植。
相关文章:
- 将 Qvector<uint8_t> 转换为 QString
- 将对象数组的引用传递给函数
- 什么时候在C++中返回常量引用是个好主意
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 何时在引用或唯一指针上使用移动语义
- 如何在c++中使用引用实现类似python的行为
- 编译C++时未定义的引用
- Ctypes wstring通过引用传递
- c++r值引用应用于函数指针
- 理解c++中的引用
- C++取消引用指针.为什么会发生变化
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 如何使用QString引用对象名称
- QT5:未定义的对"QString::free(QString::D ata*)"的引用
- Qt 5 C++ 对 Class::function(QString, Qstring, ..) 的未定义引用
- 错误:未定义对"MainWindow::on_Input_A_textChanged(QString const&)"的引用
- 获取对常量 QString 的引用
- 通过引用传递空QString