c++ - 隐式自动类型说明符
问题描述
我想知道为什么不能在某些/所有情况下完全省略 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++ 有太多的语法歧义(对于程序员来说)。我们应该避免添加更多。
推荐阅读
- c# - 发生异常时回滚 DbContext 更改
- dom-events - Elm onInput 事件处理程序不适用于 contenteditable 元素
- python - 使用 matplotlib 堆积条形图无法正常工作
- c# - 如何使用 C# 表单应用程序将十六进制字符发送到串口?
- office-addins - 从文档正文中获取 html 时 Office Word Add-In 中文乱码
- google-sheets - Google 电子表格的链接共享
- html - 为什么文本被推向圆圈的顶部
- django - 将外键字段和选择字符字段添加到 Django 用户创建表单
- wso2 - WSO2 Lopp 通过 Json 数组
- jquery - JQuery Datatable 的 rowReorder 问题