首页 >后端开发 >C++ >在最令人烦恼的解析中将参数名称括起来是怎么回事?

在最令人烦恼的解析中将参数名称括起来是怎么回事?

DDD
DDD原创
2024-12-14 19:10:12844浏览

What's the Deal with Parenthesizing Argument Names in the Most Vexing Parse?

理解最令人烦恼的解析中的歧义:将参数名称括起来

最令人烦恼的解析是指 C 中的语法歧义,在声明函数时可能会导致意外结果。出现的一个令人困惑的细节是能够将某些行解析为函数声明,即使它们看起来不符合预期的语法。

考虑以下行:

vector<int> v(istream_iterator<int>(cin), istream_iterator<int>());

这一行由于最令人烦恼的解析,可以被解释为函数声明。第一个临时迭代器 istream_iterator(cin) 被解析为类型,而第二个临时迭代器 istream_iterator() 被解释为返回不带参数的迭代器的函数。

然而,目前还不清楚第一个临时迭代器代表什么类型。理解这一点的关键是认识到 istream_iterator(cin) 等价于 istream_iterator;辛。括号是多余的,不会影响表达式的含义。这意味着第一个临时迭代器是一个名为 cin 的 int 类型的 istream_iterator。

这就提出了是否可以在函数调用中任意括号参数名称的问题。答案是肯定的,如果您想突出显示参数名称或阐明其目的,可以将参数名称括起来。但是,通常不鼓励这样做,因为它可能会导致混乱或意外的代码。此语法的主要目的是支持从 C 继承的遗留语法,并且不被认为是现代 C 代码中的最佳实践。

以上是在最令人烦恼的解析中将参数名称括起来是怎么回事?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn