【发布时间】:2011-10-30 03:02:25
【问题描述】:
我在我一直在看的 C 和 C++ 代码中都看到了。
有什么区别?
【问题讨论】:
-
唯一的区别是你应该从任何充斥着前者的代码库中运行尖叫。
-
请不要在问题标题中添加连字符。它不会更改其排序顺序或任何内容。它所做的一切都破坏了搜索功能。
标签: c++ c coding-style
我在我一直在看的 C 和 C++ 代码中都看到了。
有什么区别?
【问题讨论】:
标签: c++ c coding-style
完全没有区别。
官方语法是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" !!!!
【讨论】:
() 很重要。例如,给定int i;,decltype(i) 是int 而decltype((i)) 是int&。 (i) 使它成为一个表达式,它返回表达式的类型,而 i 只是一个标识符。由于return 只是要使用该值,因此没有区别。
T foo(T x),如果你这样做 { return x; } 它会省略复制/移动,但如果你这样做 { return std::move(x); } 它会移动构造而不是省略。如果你问我,有点傻。
写return x 表示程序员理解return 的含义。而return(x) 表示程序员错误地认为return 是一种函数。
【讨论】:
return 不是函数。
这更像是一种风格。我个人不会在 return 语句中使用括号,除非它显示操作顺序。
例子
return a;
return (a || b);
return (a && (b || c));
return (a ? b : c);
【讨论】:
return a ? b : c;