我有幾個全局靜態對象。不要介意這些是Qt類,這與這個問題無關。現在具有空捕獲列表的Lambda仍能夠從全局範圍捕獲對象?
static const QStringList JpegFileExtensions = QString::fromLatin1(jpegExtensions).split(" ");
static const QStringList TiffFileExtensions = QString::fromLatin1(tiffExtensions).split(" ");
static const QStringList RawFileExtensions = QString::fromLatin1(rawExtensions).split(" ");
static const QStringList PngFileExtensions = QString::fromLatin1(pngExtensions).split(" ");
,我有一個被一些函數,它前面的對象和計算結果初始化另一個靜態對象:
inline QString GetAllSupportedExtensions() {
QStringList extensions = QStringList() << JpegFileExtensions << TiffFileExtensions << RawFileExtensions << PngFileExtensions;
for (QString& item: extensions)
item.remove("*.");
return extensions;
}
static const QString AllSupportedExtensions = GetAllSupportedExtensions();
但由於這GetAllSupportedExtensions
功能,不使用其他任何地方,我想擺脫它,以便它不會混亂命名空間。當然,我想使用lambda,它是一個匿名函數:
static const QStringList AllSupportedExtensions = []() -> QStringList {
QStringList list = QStringList() << JpegFileExtensions << TiffFileExtensions << RawFileExtensions << PngFileExtensions;
for (QString& item: list)
item.remove("*.");
return list;
}();
請注意空的捕獲列表和參數的空列表。它編譯和運行在Windows(msvc-2013)和OS X(clang-700.1.81)上。怎麼會這樣?它是否符合標準,是否應該使用空的捕獲列表進行編譯?
,你可以做一個[MCVE],刪除了Qt的依賴,並提供一個'主()'? – YSC
@YSC:好的。等一下。 –
郝,沒關係,看看NathanOliver的回答。就這麼簡單。 – YSC