隐式自动类型说明符

Yam*_*ari 1 c++ auto

我想知道为什么在某些/所有情况下不可能完全省略 auto 关键字,例如

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

  auto x = 10;
  x = 10;
}
Run Code Online (Sandbox Code Playgroud)

是否存在歧义或类似问题?还是简单的设计选择?

eer*_*ika 6

考虑一下:

 struct x {};

 [](x){}(10);
Run Code Online (Sandbox Code Playgroud)

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


x = 10;
Run Code Online (Sandbox Code Playgroud)

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

  • @Yamahari 但现在这不是一个歧义。委员会和我们的语言用户都希望避免向以前格式良好的程序引入编译错误,除非格式良好的代码被破坏。 (4认同)
  • @Yamahari 这就是 lambda 函数语法的工作原理。这里没什么可讨论的。我们可以就为什么它是 `int x = 10;` 而不是 `x : int = 10;` 或其他方式进行长时间的讨论,但这对任何人都没有用。 (2认同)