当前位置: 首页 > 知识库问答 >
问题:

在默认初始化器gcc vs clang中使用lambda

姬俊能
2023-03-14
#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);
}

对于中继中的叮当声工作正常,但对于来自中继的g,失败并显示错误消息(链接):

错误:未为此 lambda 函数捕获“此”

在命名空间范围内定义point_of_cone对两者都适用。

使用 [this] lambda 捕获稍微修改的定义也适用于全局或本地范围。

哪个编译器是对的?

共有1个答案

鱼旺
2023-03-14

这是一个海湾合作委员会的错误。

int main() {
    struct A {
        int x, i = [&] { return x; }();
    } a{0};
}

这失败了,但是如果我们...

  • 更改

它工作了。但是,这两者都不会对格式良好产生任何影响。

报告:#78019。

 类似资料:
  • 考虑以下代码 VS2013编译器发出以下警告: 警告C4351:新行为:数组“B::member”的元素将默认初始化1 这里有记载 使用C 11,并应用“默认初始化”的概念,意味着B. part的元素将不会被初始化。 但我认为,成员{}应该执行值初始化,而不是默认初始化。VS2013编译器是否损坏? 8.5美元/6 默认初始化类型为T的对象意味着:-如果T是(可能是cv限定的)类类型(第9条),则

  • 我在Visual Studio2019中有一个Xamarin表单解决方案。我现在只使用Android版本。完整的错误是: 在此进程中,java.lang.IllegalStateException Message=Default FirebaseApp未初始化AppCardView.Sample.android。确保首先调用FirebaseApp.InitializeApp(上下文)。 在我的An

  • 根据我的参考,基元类型具有默认值,对象为null。我测试了一段代码。 行将是指向变量的错误,表示,而在给定引用中,将作为默认值。但是,使用下面给定的代码,它将实际打印。 第一个代码可能会出什么问题?类变量的行为是否与局部变量不同?

  • 问题内容: 当搜寻通过Java语言规范来回答这个问题),我学到的是 在初始化类之前,必须先初始化其直接超类, 但不初始化由该类实现的接口。 同样,在初始化接口之前,不会初始化接口的超级接口。 出于我自己的好奇心,我尝试了一下,并且未如预期的那样对接口进行了初始化。 该程序打印 但是,如果接口声明了一个方法,则确实会发生初始化。考虑给定的接口 然后上面的相同程序将打印 换句话说,接口的字段已初始化(

  • null 必需的 获取java对象(根元素),它完全表示xml和每个由默认值初始化的成员。 当我试图在不显式设置值的情况下marshall xml时,默认值并不能使sence...有什么方法可以在不自定义生成的类的情况下,用默认值填充xml吗? .xsd的示例: 和java类:

  • 甚至我也调用了FirebaseApp.InitializeApp(this);在很多地方 MyApplication(扩展应用程序),在活动的onCreate中调用