问题描述
- 关于Qt的Q_COMPILER_RVALUE_REFS (vs2010宏被启用)
-
我在VS2010编译Qt4.8.6的程序的时候提示如下错误:
代码:QString tts = "";
QVariant qv(QString("11"));
tts = qv.toString(); // 在vs2010中这句话会编译错误, 但在vs2008中则编译正常/* 使用如下代码段则可以绕开vs2010编译错误,但不知道什么原因 QString tempStr = qv.toString(); tts = tempStr; */ return tts;
错误:
error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: class QString & thiscall QString::operator=(class QString &&)" (imp_??4QString@@QAEAAV0@$$QAV0@@Z)
初步原因是:
#if defined(Q_CC_MSVC) && _MSC_VER >= 1600 《---- vs2010下 宏启用
define Q_COMPILER_RVALUE_REFS
在QString类中,有如下定义:
#ifdef Q_COMPILER_RVALUE_REFS
inline QString &operator=(QString &&other)
{ qSwap(d, other.d); return *this; }
#endif这句:
tts = qv.toString();
实际调用就是:
inline QString &operator=(QString &&other)调用这句话为什么会导致错误就不懂了, QString &&other 这样的用法是要达到什么效果呢,还请高手指点。
时间: 2024-12-10 18:51:59