隐式自动类型说明符

Implicit auto type specifier

我想知道为什么在 some/all 情况下不能完全省略 auto 关键字,例如

int main()
{
  [](auto x){}(10); // why this?
  [](x){}(10); // and not this?

  auto x = 10;
  x = 10;
}

是否有歧义或类似的问题?或者它只是一个简单的设计选择?

考虑一下:

 struct x {};

 [](x){}(10);

那个 lambda 是带有 x 类型的未命名参数(根据当前语言规范)还是推导类型的名为 x 的参数(根据您的建议)?您建议的语法与函数参数声明的预先存在的语法不明确。


x = 10;

这更成问题,因为它与赋值没有区别。写这篇文章的人可能试图定义一个变量(您的建议),但它也可以根据上下文分配现有变量。 C++ 有太多的语法歧义(对程序员而言)。我们应该避免添加更多。