首页 > 解决方案 > 隐式自动类型说明符

问题描述

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

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

  auto x = 10;
  x = 10;
}

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

标签: c++auto

解决方案


考虑一下:

 struct x {};

 [](x){}(10);

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


x = 10;

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


推荐阅读