意外行为字符串文本
Unexpected behavior string literal
我有两种方法:
ind addFilter(ind column, const QString & condition);
ind addFilter(ind column, bool condition);
当我使用此结构gcc时,选择第二种方法(带bool condition
(
filters->addFilter(familyNameInd, "М*");
为什么std::string
转换为布尔值而不是 QString?或者我可以在编译时将所有字符串文本指定为 QString?
根据C++标准(13.3.3.2 对隐式转换序列进行排名(
2 在比较隐式转换序列的基本形式时(如 在 13.3.3.1( 中定义( — 标准转换序列 (13.3.3.1.1( 为 比用户定义的转化序列更好的转化序列 或省略号转换序列,以及...
相对于您的示例,转换为布尔值是标准的隐式转换。因此,它比使用转换构造函数的用户定义转换更好。因此,如果您希望调用类型为 const QString &
的参数的重载函数,则必须显式指定从字符串文字到类型 QString:
QString("М*" (' 的临时对象的转换。
"M*" 是一个常量字符*,由于隐式转换规则,它可以转换为布尔值。隐式转换将在 QString 类中选择。
你将不得不像这样调用函数:
filters->addFilter(familyNameInd, QString("М*"));
为了避免不必要的 QString 副本,请考虑同时使用 QStringLiteral 宏:
filters->addFilter(familyNameInd, QStringLiteral("М*"));
首先,你的代码坏了。没有像 ind
这样的参数和返回类型。我会假设你的意思是int
.
其次,在隐式转换方面,POD 类型优先于C++自定义类型。
为什么 std::string 转换为 bool 而不是 QString?
我不知道你为什么认为它会std::string
.它根本不是,甚至在C++也没有。它是很好的老常量字符[X],其中X恰好是三个(两个字母+终止nil(。
或者我可以在编译时将所有字符串文本指定为 QString?
不,但是无论这种情况如何,在处理Qt中的字符串文字时,您都应该在任何情况下使用它:
filters->addFilter(familyNameInd, QStringLiteral("М*"));
对于这样的原始字符串文字,请不要使用 QString
构造器。这是没有意义的。因此,你会写这样的东西:
主.cpp
#include <QString>
#include <QDebug>
int addFilter(int column, const QString & condition) { qDebug() << "Test 1"; }
int addFilter(int column, bool condition) { qDebug() << "Test 2"; }
int main()
{
addFilter(0, QStringLiteral("foo"));
return 0;
}
main.pro
TEMPLATE = app
TARGET = main
QT = core
SOURCES += main.cpp
构建和运行
qmake && make && ./main
输出
Test 1
- 在 C++ 中从 8 位 ASCII 字符创建 7 位 ASCII 文本字符串
- cin>>gender 和 cin>>*gender ( c 样式文本字符串)有什么区别
- 是否可以动态检查文本字符串是否是 C++ 中给定类的成员?
- 用Zlib解压缩文本字符串
- 将文本字符串作为常量字符 * 参数传递会导致代码分析器错误
- 来自文本字符串或某种其他机制的代码类自动生成器
- 函数读取最大和min int值,并用文本字符串返回
- 模板代码和文本字符串
- 声明具有常量引用与常量变量的常量文本字符串
- 加密给定的文本字符串-Caesar Cipher
- 如何使用键盘输入和sf ::文本在SFML中添加一种文本框以显示文本字符串
- 在C++代码中,如何让用户在2个文本字符串之间输入一个数字
- 如何将文本从一个文件复制到另一个文件,然后将文本字符串的第一个字母转换为大写
- 从文本字符串推断类型
- 跟踪内存中的文本字符串
- 将字符串变量与整数和文本字符串连接起来的 C++ 字符串流
- 将 char 数组分配给文本字符串 - C++
- 如何修复将文本字符串附加到 C 字符串的错误
- 使用C++读取不同长度的多个文本字符串
- 在C++中创建原始文本字符串,类似于 C# 的"@ string"