C++ 隐式自动类型说明符

C++ 隐式自动类型说明符,c++,auto,C++,Auto,我想知道为什么在某些/所有情况下不能完全省略auto关键字,例如 int main() { [](auto x){}(10); // why this? [](x){}(10); // and not this? auto x = 10; x = 10; } 是否存在歧义或类似问题?还是简单的设计选择 考虑一下: struct x {}; [](x){}(10); 根据当前的语言规范,这是一个带有未命名的x类型参数的lambda,还是根据您的建议,它是一个名为x的推断

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

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

  auto x = 10;
  x = 10;
}
是否存在歧义或类似问题?还是简单的设计选择

考虑一下:

 struct x {};

 [](x){}(10);
根据当前的语言规范,这是一个带有未命名的x类型参数的lambda,还是根据您的建议,它是一个名为x的推断类型参数?您建议的语法与函数参数声明的现有语法不明确

这是更大的问题,因为它是无法区分的分配。写这篇文章的人可能试图定义你建议的变量,但也可能是根据上下文分配现有变量。C++对程序员来说有太多的句法歧义。我们应该避免添加更多内容。

考虑一下:

 struct x {};

 [](x){}(10);
根据当前的语言规范,这是一个带有未命名的x类型参数的lambda,还是根据您的建议,它是一个名为x的推断类型参数?您建议的语法与函数参数声明的现有语法不明确


这是更大的问题,因为它是无法区分的分配。写这篇文章的人可能试图定义你建议的变量,但也可能是根据上下文分配现有变量。C++对程序员来说有太多的句法歧义。我们应该避免添加更多的内容。

你必须询问标准委员会的某个人,因为我们大多数人所能做的就是猜测。auto x=10;变量定义和初始化。x=10;现有变量的赋值。完全不同的事情。你一半的问题是@Yamahari我不喜欢这个改变。如果我写x=10;没有定义x,它让我知道我犯了一个错误。要么我忘了写一个自动类型,要么我拼错了一个标识符。在第一种情况下,为了保护自己不受第二种情况的影响,值得费心。不幸的是,我被拒绝了。你得问问标准委员会的某个人,因为我们大多数人所能做的就是猜测。auto x=10;变量定义和初始化。x=10;现有变量的赋值。完全不同的事情。你一半的问题是@Yamahari我不喜欢这个改变。如果我写x=10;没有定义x,它让我知道我犯了一个错误。要么我忘了写一个自动类型,要么我拼错了一个标识符。在第一种情况下,保护自己不受第二种情况的影响是值得的。不幸的是,我被拒绝了。我明白了,但在这种情况下,可能是一个编译时错误指示了歧义,不是吗?@Yamahari,但现在不是歧义。委员会和该语言的美国用户希望避免将编译错误引入以前格式良好的程序,除非格式良好的代码被破坏。@Yamahari lambda函数语法就是这样工作的。这里没什么可谈的。我们可以长时间讨论为什么int x=10;而不是x:int=10;或者其他方式,但这对任何人都没有用处。我明白了,但在这种情况下,可能是一个编译时错误,指示了歧义,不是吗?@Yamahari,但现在不是歧义。委员会和该语言的美国用户希望避免将编译错误引入以前格式良好的程序,除非格式良好的代码被破坏。@Yamahari lambda函数语法就是这样工作的。这里没什么可谈的。我们可以长时间讨论为什么int x=10;而不是x:int=10;或者其他方式,但这对任何人都没用。