std::initializer_list 崩溃问题
发现使用std::initializer_list<QString>时,会造成程序崩溃,貌似是堆栈破坏,猜测和QString的数据隐式共享机制有关,但具体原因还未定位,测试代码如下,期待解答:
#include "qstring_initializer_list_test.h"
#include <QtWidgets/QApplication>
#include <vector>
#include <QString>
#include <QStringList>
#define LK_TEACHING_MODE "teaching_mode"
#define LK_VS_MODE "vs_mode"
static QString s_teaching("teaching mode");
static QString s_vs("vs mode");
static QString QStringOfKey(const std::string& key)
{
return key == LK_TEACHING_MODE ? QString("teaching mode") : QString("vs mode");
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
{
//std::initializer_list<QString> container = { s_teaching, s_vs }; // 没问题
//std::initializer_list<QString> container = { QString("teaching mode"), QString("vs mode") }; // 没问题
std::initializer_list<QString> container = { QStringOfKey(LK_TEACHING_MODE), QStringOfKey(LK_VS_MODE) }; // 会崩溃!!!!!!!!!!!!!!
// 没问题
//std::vector<QString> container;
//container.emplace_back(QStringOfKey(LK_TEACHING_MODE));
//container.emplace_back(QStringOfKey(LK_VS_MODE));
// 没问题
//QStringList container;
//container.push_back(QStringOfKey(LK_TEACHING_MODE));
//container.push_back(QStringOfKey(LK_VS_MODE));
}
QString_initializer_list_Test w;
w.show();
return a.exec();
}