返回(a)与返回a

10 c c++ coding-style

我在C和C++代码中都看到了我一直在关注的内容.

有什么不同?

Sal*_*iti 38

没有任何区别.

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

出于这个原因你不应该读它,return( a );return (a); 我认为差异是微妙但明确的,括号不适用于返回,而是适用于.

((((a))))(a)相同的a.

你也可以写点像......

int x = (((100)));
Run Code Online (Sandbox Code Playgroud)

你也可以写点像......

printf("%d\n", (z));
Run Code Online (Sandbox Code Playgroud)

正如有人在评论中所说的,现在有了C++ 11(2011版C++语言)的新运算符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"
Run Code Online (Sandbox Code Playgroud)

正如我所说,学生们对此并不感兴趣太过深奥,而且它只能用于支持至少部分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" !!!!
Run Code Online (Sandbox Code Playgroud)

  • @MichaelPrice:确实存在`()`重要的上下文.例如,给定`int i;`,`decltype(i)`是`int`而``decltype((i))`是`int&`.`(i)`使它成为一个表达式,它返回表达式的类型,而`i`只是一个标识符.由于`return`只是要使用该值,因此没有区别. (6认同)
  • 因此,不要在自己的代码中添加parens来返回语句. (4认同)
  • "_学生不会对此感兴趣_"他们会.(或者至少应该.)这意味着:不要学习这门语言.设计师发疯了.它只会变得更糟. (2认同)

Rae*_*ald 11

写作return x表明了解程序的程序员return.而return(x)表示程序员错误地认为这return是一种功能.

  • 每当我看到回归(x),我希望我是一个更暴力的人. (12认同)