代码之家  ›  专栏  ›  技术社区  ›  user396672

似乎是MS VC2010 lambda表达式中的错误?

  •  4
  • user396672  · 技术社区  · 14 年前

    静态初始值设定项中使用的lambda表达式的行为 神奇地依赖于lambda体内部初始化的局部变量

    int static_1 = 
        [=]() -> int {
          int k_=7;// if this statement presents, the lambda doesn't work (static_1 remains uninitialized)
          return 5;
    } ();
    
    int static_2= 
        [=]() -> int {
          //Ok  without variable initializer int k_=7;
          return 5;  
    }();
    
    int main() {
      int local= 
          [=]() -> int {
            int k_=7; // Ok with variable initializer  when lambda used in local function context
            return 5;
      } ();
    
      printf("\n static_1= %d \n static_2= %d \n local= %d", static_1,static_2,local);
    }
    
    1 回复  |  直到 9 年前
        1
  •  2
  •   Motti    14 年前

    在最终草案中,我看不到会导致预期这种行为的任何内容(尤其是因为它是无声发生的)。

    我已经在VS10中重现了这个问题,GCC4.5.0中的行为正如您所期望的(所有变量都已初始化),所以我会说是的,这是VS10中的一个bug,您打开了一个bug吗?


    更新: 我已经提交了 this bug 得到答复:

    感谢您提交此问题。这是lambda实现中的一个bug,已修复。修复程序应该在下一个版本的Visual Studio中提供(可能还有Visual Studio 2010 SP1,不过我不能保证)。