-6

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

int main() 
{
   int i(); 
}

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

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

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

很简单,我可以在这里写什么,而不是自动和编译器不会给我一个错误?我只是想明白。

4

2 回答 2

5

广告 1。

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

广告 2。

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

lambda 表达式(...)的类型是唯一的、未命名的非联合类类型 — 称为闭包类型(...)

因此,除了使用auto.

于 2013-09-06T15:21:43.807 回答
2

这不是变量默认初始化,而是函数声明,这要归功于most-vexing-parse

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

于 2013-09-06T15:21:36.563 回答