我正在研究一个QT项目并发现了一个奇怪的行为:
我有一个类似于几个构造函数的类
DB_Variable(QString name, QString newValue):
name(name),value_string(newValue), var_type(DB_STRING){}
DB_Variable(QString name, bool newValue):
name(name), value_bool(newValue), var_type(DB_BOOL){}
Run Code Online (Sandbox Code Playgroud)
我现在想使用第一个构造函数来创建一个这样的对象:
DB_Variable foo("some_name"," ");
Run Code Online (Sandbox Code Playgroud)
我希望将空字符串解释为QString,但调用第二个(bool)构造函数.有人可以告诉我为什么吗?是""指向空字符串的指针,然后某种程度上是bool而不是字符串?
富
此问题是由构造函数中的隐式转换引起的.字符串文字(例如代码中的字符串文字)存储为const char
类型.因为您没有采用此类型的构造函数,所以编译器会尝试查找转换为可在其中一个构造函数中找到的类型.
在这种情况下const char*
转换为bool
更容易,QString
所以当你这样做时:
DB_Variable foo("some_name"," ");
Run Code Online (Sandbox Code Playgroud)
构造函数
DB_Variable(QString name, bool newValue):
Run Code Online (Sandbox Code Playgroud)
叫做.
请注意,您看到的行为并不是因为" "
得到的处理方式与任何其他字符串文字不同,只是您很可能没有带有类型的构造函数bool, bool
(所有构造函数都QString
将第一个参数作为第一个参数?).如果您有一个如下构造函数,则可能是:
DB_Variable(bool test1, bool newValue):
Run Code Online (Sandbox Code Playgroud)
那么当你做了类似的事情时,就会调用它 DB_Variable foo("some_name"," ");
要获得您想要的结果,您可以这样传递QStrings
:
DB_Variable foo(QString("some_name"), QString());
Run Code Online (Sandbox Code Playgroud)
或者也许定义一个const char*
第二个参数的构造函数.
归档时间: |
|
查看次数: |
269 次 |
最近记录: |