【发布时间】:2016-06-14 16:42:37
【问题描述】:
简单地说,这两个for 循环是否以相同的方式运行:
for (int i = 0; i < (p_size < size ? p_size : size); i++);
for (int i = 0; i < {p_size < size ? p_size : size}; i++);
?
循环在一个方法(成员函数)内部,p_size 是它的参数,size 是一个属性(成员变量)。 Microsoft Visual Studio 2015 编译了这两个代码,但 p_size 的颜色不像代码中的其他参数(在编辑器中)带有大括号。
【问题讨论】:
-
带大括号的版本不能用 gcc 5.3 编译。它是一个非标准的、不可移植的、Microsoft 编译器专用的编译器“功能”,显然是为了“拥抱和扩展”C++ 而设计的。
-
@SamVarshavchik 请不要表现得像微软是唯一一个“拥抱和扩展”该语言的编译器供应商。甚至开源编译器也能做到。
-
哦,您碰巧知道任何其他允许您将 main 声明为“void Main(array
^ args)”并调用 _that_C++ 的编译器? -
起初我认为大括号中的构造是 GCC "Statement expression" 语言扩展。但我看到那些必须用括号和大括号括起来:
({ ... })。这到底是什么 MSVC 扩展?我不熟悉它。 -
MS 调用
void Main(array<String^>^ args)"C++/CLI" 并且他们为它提出了一个 ECMA 标准。我不使用它或不太关心它(我已经很长时间没有做过任何真正的.NET 工作了,当我这样做的时候是在 C# 中),但人们可能会认为它是微软以类似的方式为 NET 扩展了 C++了解 Stroustrup 如何出于他的目的将 C 扩展为 C++。我并不是说 C++/CLI 是一种好语言或好主意,但扩展现有语言以满足新需求并非没有先例。 C++/CLI 的一个好处是任何 C++ 程序员都会立即将其识别为“非 C++”。
标签: c++ visual-studio-2015 brackets curly-brackets