【问题标题】:Do both parentheses and braces around expressions basically do the same thing?表达式周围的括号和大括号基本上都做同样的事情吗?
【发布时间】: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&lt;String^&gt;^ args) "C++/CLI" 并且他们为它提出了一个 ECMA 标准。我不使用它或不太关心它(我已经很长时间没有做过任何真正的.NET 工作了,当我这样做的时候是在 C# 中),但人们可能会认为它是微软以类似的方式为 NET 扩展了 C++了解 Stroustrup 如何出于他的目的将 C 扩展为 C++。我并不是说 C++/CLI 是一种好语言或好主意,但扩展现有语言以满足新需求并非没有先例。 C++/CLI 的一个好处是任何 C++ 程序员都会立即将其识别为“非 C++”。

标签: c++ visual-studio-2015 brackets curly-brackets


【解决方案1】:

这是有效的代码:

for (int i = 0; i < (p_size < size ? p_size : size); i++);

这是无效代码:

for (int i = 0; i < {p_size < size ? p_size : size}; i++);

这样的表达式中间有大括号是无效的。

我一般也会推荐std::min

for (int i = 0; i < std::min(p_size, size); i++);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多