![]() |
1
154
删除显式
例如
在那里你可以看到
|
![]() |
2
39
你的问题有两种解释:
芭丝谢芭 answered 很好地,第一种解释,第二种解释,考虑以下内容(假设到目前为止还没有其他声明; 假设 有效C++:
它 将 有可能的话,其他语言也能很好地处理(好吧,也许除了阴影问题)。然而,C++中不是这样的,现在的问题(在第二种解释的意义上)是: 为什么? 这一次,答案并不像第一次解释那样明显。不过,有一点很明显:对关键字的明确要求使语言更安全(我不知道这是否是促使语言委员会做出决定的原因,但它仍然是一个要点):
我们可以同意这一点,不需要任何进一步的解释吗?
(引) psmears' 评论,因为它的重要性-感谢暗示) |
![]() |
3
14
我将以一种有助于你理解为什么你需要的方式对你的问题稍加修改。
不是吗? 可能的 ?当然,这是“可能的”。问题是这样做是否值得。
在其他语言中,大多数不使用类型名的语法有两种工作方式。有一种走的方式,在哪里
假设在C++中没有语法应用问题(尽管我已经看到了
好吧,我不能再这样做了:
看,
现在,如果给定的值是一个引用,那么可以使用这种赋值语法来推导引用。但这意味着你不能:
这个
副本
从元组创建独立于
好吧,也许我们可以稍微扩展一下这些语法来解释这种区别。也许吧
好的,很好。这个怎么样:
哦,没错,C++实际上有
two
placeholders:
当您在模板代码中工作并且不确定函数的返回值是什么时,这非常有用。这对于转发是很好的,而且它是一个必不可少的工具,即使它没有被广泛使用。
所以现在我们需要在语法中添加更多内容。
看看这个语法,这不是很容易意外地错误输入吗?不仅如此,它还很难自我记录。即使你从未见过
但这是意见方面的东西,还有更多实质性的问题。请参见,所有这些都基于使用赋值语法。好。。。你住的地方怎么样 不能 使用赋值语法?这样地:
我们把那个换成
另外,复制初始化(使用
当然,你可以声明
另外,还有一件事:C++ 14。它给了我们一个有用的演绎特征:回归式演绎。但这是基于占位符的。很像基于距离的
看,所有这些问题都来自同一个来源:您发明了用于声明变量的全新语法。基于占位符的声明不必发明新的
句法
. 他们使用的语法与以前完全相同;他们只是使用一个新的关键字,它的作用类似于一个类型,但有特殊的含义。这使得它可以在基于范围的环境中工作。
占位符之所以起作用,是因为它们是解决问题的最简单的方法,同时保留了使用实际类型名的所有好处和通用性。如果你想出了另一个像占位符一样普遍工作的替代方案,那么它不太可能像占位符那样简单。 除非只是用不同的关键字或符号拼写占位符… |
![]() |
4
12
简而言之:
|
![]() |
5
11
可以通过使
所以它是对语言的保守扩展;它符合现有的语法。没有它
|
![]() |
6
9
语法必须明确并且向后兼容。 如果删除auto,将无法区分语句和定义。
|
![]() |
7
3
加上前面的答案,一个旧屁的额外注释:看起来您可能会认为它是一个优势,可以开始使用一个新的变量,而不必以任何方式声明它。
在可能隐式定义变量的语言中,这可能是一个大问题,特别是在大型系统中。您输入了一个错别字,调试了几个小时,结果发现无意中引入了一个值为零(或更糟)的变量-
只是使用
想想看,为了避免这种噩梦,“implicit none”语句是在Fortran中引入的——现在你可以看到它被用在所有重要的Fortran程序中。没有它只是…吓人的。 |
![]() |
apetrai · 我应该如何假设算法使用哪种迭代器类别? 2 年前 |
![]() |
ridiculous_fish · std::是否保证短路? 2 年前 |
![]() |
Fabio · 在c中将指针赋给常数指针++ 2 年前 |
![]() |
johnco3 · 初始化固定C数组成员结构 6 年前 |
![]() |
mans · 为什么出现此错误:constexpr在此处无效 6 年前 |
![]() |
juztcode · 在C++中尝试捕获-创建了多少个对象 6 年前 |
![]() |
Steven Scott · 忽略元素的基于范围的for循环 6 年前 |