【问题标题】:return (a) vs. return a返回 (a) 与返回 a
【发布时间】:2011-10-30 03:02:25
【问题描述】:

我在我一直在看的 C 和 C++ 代码中都看到了。

有什么区别?

【问题讨论】:

  • 唯一的区别是你应该从任何充斥着前者的代码库中运行尖叫。
  • 请不要在问题标题中添加连字符。它不会更改其排序顺序或任何内容。它所做的一切都破坏了搜索功能。

标签: c++ c coding-style


【解决方案1】:

完全没有区别。

官方语法是return something;return;,当然是关键字,不是函数。

因此,您不应将其阅读为return( a );,而应阅读为return (a); 我认为区别很微妙但很明显,括号不适用于返回,而是适用于 a。

((((a))))(a) 相同,即与a 相同。

你也可以写...

int x = (((100)));

你也可以写...

printf("%d\n", (z));

正如 cmets 中有人所说,现在有了 C++11(C++ 语言的 2011 版)新运算符 decltype。此运算符引入了一个新示例,其中(a)a 不同,这非常深奥且有点离题,但我添加此示例只是为了完整性。

    int x = 10;
    decltype(x) y = x;   // this means int y = x;
    decltype((x)) z = x; // this means int& z = x;
    y = 20;
    z = 30;
    std::cout << x << " " << y << " " << z << std::endl;
    // this will print out "30 20 30"

学生不会对此感兴趣,正如我所说的那样,它太深奥了,而且它只适用于至少支持部分 C++11 标准的编译器(如 GCC 4.5+ 和 Visual Studio 2010)。

这也与typeid关键字的使用形成对比:

int a;
std::cout << typeid(a).name() << std::endl; // will print "int"
std::cout << typeid((a)).name() << std::endl; // will print "int" !!!!

【讨论】:

  • 因此,请勿在您自己的代码中添加括号以返回语句。
  • 是的,我完全同意 AShelly,但这样做并没有错,除了让学生感到困惑。
  • @MichaelPrice:确实有上下文() 很重要。例如,给定int i;decltype(i)intdecltype((i))int&amp;(i) 使它成为一个表达式,它返回表达式的类型,而 i 只是一个标识符。由于return 只是要使用该值,因此没有区别。
  • "学生不会对此感兴趣" 他们会的。 (或者至少应该。)这意味着:不要学习这种语言。设计师们疯了。它只会变得更糟。
  • @ildjarn:(令人惊讶的是)这只是允许的优化,而不是必需的,所以从技术上讲,这取决于您的特定编译器。我看不出它有什么不同。就是说,我知道在 MSVC2010 中,给定 T foo(T x),如果你这样做 { return x; } 它会省略复制/移动,但如果你这样做 { return std::move(x); } 它会移动构造而不是省略。如果你问我,有点傻。
【解决方案2】:

return x 表示程序员理解return 的含义。而return(x) 表示程序员错误地认为return 是一种函数。

【讨论】:

  • 每次看到 return(x) 都希望自己是一个更暴力的人。
【解决方案3】:

return 不是函数。

这更像是一种风格。我个人不会在 return 语句中使用括号,除非它显示操作顺序。

例子

return a;
return (a || b);
return (a && (b || c));
return (a ? b : c);

【讨论】:

  • 就个人而言,我不会理会这些括号中的任何一个:return a ? b : c;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-24
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多