Qt5:此代码使用 msvc2012 编译正常,但使用 MinGW 编译时出错...为什么?

Qt5: This code compiles ok with msvc2012, yet gives error compiled with MinGW... Why?

我在 Windows7 平台上使用 Qt5.5.1。
我有以下代码可以使用 msvc2012 构建工具包编译(和运行):

void MyDialog::accept()
{
    DataBase::instance()->logEventMessage(tr("Modified settings!"));
    close();
}

其中 logEventMessage 是:

int  logEventMessage(QString & eventDescription);

当我切换到 MinGW 构建工具包时,编译器说:

No matching function for call to DataBase::logEventMessage(QString)...

好吧,解决这个问题很简单(编译器期望有一个 QString&):

void MyDialog::accept()
{
    QString text(tr("Modified settings!"));
    DataBase::instance()->logEventMessage(text);
    close();
}

然而,有两件事仍然困扰着我 :
1) 为什么初始代码可以使用 msvc2012 构建工具包编译(但不能使用 MinGW 编译)?
2) 哪个编译器是 C++ "correct" ?... ;)

您的函数需要 QString&。这是一个输入和输出参数。您使用临时构造它,从而丢弃它所做的任何更改。设计明智,这是可疑的。

可能您想参加 const&

根据 C++ 标准,您不能将临时变量绑定到对非常量的引用。

MSVC 有一个不符合要求的扩展,可以防止发生该错误。

具有正确编译器标志的 MSVC 2015 行为正常。