关于初始化和lambda在c ++中的几个问题

时间:2013-09-06 15:19:39

标签: c++

我在linux上使用了netng的clang3.3。全部用C ++ 11。我有一个关于初始化的问题

int main() 
{
   int i(); 
}

以下代码已编译但无法正常运行。此值不会由调试器定义,也不能打印。我想用默认值描述int。相反,我可以写“int {}”,这将是一个完美的默认初始化。但是我想要理解我在这里写的东西,只是想要。

第二个问题。它关于lambda。我想知道如何在没有auto关键字的情况下描述lamda。

auto lambda = [&]()mutable->int{}; 

简单,我可以写在这里而不是auto和编译器不会给我一个错误?我只是想了解。

2 个答案:

答案 0 :(得分:5)

广告1。

你被most vexing parse咬了一口。基本上,在某些情况下,C ++语法会导致语句和声明之间的歧义。在这种情况下,输入被解释为声明。由于int i()可以解释为整数变量定义或函数声明,因此它被解释为无参数函数i的声明,返回int

Ad 2。

至于第二个问题,C ++ 11标准版§5.1.2/3说明了一切:

  

lambda-expression (...)的类型是一个唯一的,未命名的非联合类类型 - 称为闭包类型(...)< / p>

因此,除了使用auto之外,没有办法引用它。

答案 1 :(得分:2)

这不是变量默认初始化,它是一个函数声明,感谢most-vexing-parse

简而言之,标准说如果表达式可以作为函数声明或其他东西进行评估,它将被评估为函数声明。
在您的情况下,函数a没有参数,int作为返回值。