#include <cassert>
#include <cmath>
int main()
{
struct point_of_cone
{
double x, y;
double z = [&] { using std::sqrt; return sqrt(x * x + y * y); }();
};
point_of_cone p = {3.0, 4.0};
assert(p.z == 5.0);
}
工作正常clang++
從後備箱,但對於g++
從主幹失敗,錯誤消息(link):在默認初始GCC使用lambda VS鐺
error: 'this' was not captured for this lambda function
在命名空間範圍point_of_cone
定義工作正常都。
對[this]
lambda捕獲稍作修改的定義對全局或本地範圍都適用。
哪個編譯器是正確的?
在您的問題中發佈代碼,請 – xaxxon
@Orient不,我指的是xaxxon的godbolt鏈接,他設置了錯誤的標誌。 – Columbo
嗯,問題是'[&]'捕獲'這個'。不確定新標準,但答案在這裏不建議:http://stackoverflow.com/questions/16323032/why-cant-i-capture-this-by-reference-this-in-lambda – Hayt