“type const & value”和“type const& value”之间有区别吗?

Is there a difference between 'type const &value' and 'type const& value'?

提问人:M. Doe 提问时间:3/12/2020 最后编辑:DeduplicatorM. Doe 更新时间:3/12/2020 访问量:588

问:

这个话题基本上说明了一切。我正在遵循一个教程,上面写着 ,但 Visual Studio 不断自动将其更正为 .type const &valuetype const& value

有区别吗?

有约定吗?

C++ Visual-Studio 常量按 引用传递 代码格式

评论

0赞 Pete Becker 3/12/2020
还有 和 .const type& valueconst type &value
7赞 HolyBlackCat 3/12/2020
没有任何区别。
1赞 Mat 3/12/2020
stackoverflow.com/questions/22766907/......
0赞 Mat 3/12/2020
如果您愿意,也可以编写 ,或将每个标记放在单独的行上。type const & value
0赞 Vlad from Moscow 3/12/2020
@M. Doe:默认情况下,Visual Studio 使用 Stroustrup 建议的错误代码格式。

答:

2赞 Xirema 3/12/2020 #1

C++ 解析令牌的方式规定,这两个语句将被等效地对待,并且将生成的代码没有区别。

至于为什么 MSVC 不断自动更正另一个,我真的不认为它应该这样做,但我对它这样做的猜测是 MSVC 正在帮助您保持代码的一致性(这很重要!),并且它假设您希望代码的外观是这样的格式:.type const& name

这种格式更容易识别C++,而另一种方法更像C(尽管C没有引用;但它确实有指针,类似的声明也会更明显地是C),MSVC希望强制执行C++样式。type const &nametype const *name

但同样;它们之间没有功能差异。两者都有效,都会编译,并且都会有相同的行为。

评论

1赞 François Andrieux 3/12/2020
值得注意的是,所有自动格式规则(包括何时格式化和何时不格式化)都在 Tools->Options...->Text Editor->C/C++->Formatting 中配置。
1赞 Peter 3/12/2020
“可识别的C++”更准确地说是“根据某些人可识别的C++”。是的,一些大牌(如斯特鲁斯特鲁普)提倡它,但有不同的观点。如果使用相同的格式来声明多个变量,则此样式会中断,例如 where 是指针,不是指针,但格式表明两者都是指针。然后需要额外的规则,否则这些规则是不必要的,例如“不要编写多个变量的声明”,这使得事情变得更加丑陋(需要一个风格规则来处理另一个风格规则的缺陷是荒谬的)。type* a, b;ab