返回(a)与返回a 我在C和C++代码中看到了两个代码。
有什么区别吗?完全没有区别 官方语法是返回(a)与返回a 我在C和C++代码中看到了两个代码。,c++,c,coding-style,C++,C,Coding Style,有什么区别吗?完全没有区别 官方语法是返回某物或返回 。此运算符引入了一个新示例,其中(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 <
返回某物代码>或返回当然,它是一个关键字,而不是一个函数
因此,您不应将其解读为return(a)代码>但作为<代码>返回(a)代码>
我认为两者的区别很微妙但很明显,括号不适用于return,而适用于a
(((a)))
与(a)
相同,后者与a
相同
你也可以写一些像
int x = (((100)));
printf("%d\n", (z));
你也可以写一些像
int x = (((100)));
printf("%d\n", (z));
正如评论中所说,现在,用C++ 11(C++语言的2011版本)新的操作符<代码> DeCytS> <代码>。此运算符引入了一个新示例,其中
(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"
返回
不是一个函数
这更像是一个风格问题。我个人不在return语句中使用括号,除非它显示了操作顺序
例子
return a;
return (a || b);
return (a && (b || c));
return (a ? b : c);
编写returnx
表示程序员理解return
的含义。然而return(x)
表示程序员错误地认为return
是一种函数。因此,不要在自己的代码中添加返回语句的参数。是的,我绝对同意AShelly,但这样做没有错,除了让学生感到困惑。@MichaelPrice:确实有上下文的问题。例如,给定inti
,decltype(i)
是int
,而decltype((i))
是int&
。(i)
使其成为一个表达式,并返回表达式的类型,而i
只是一个标识符。由于return
只会使用该值,因此没有区别。“学生不会对此感兴趣”他们会这样做。(或者至少应该)意思是:不要学这种语言。设计师们都疯了。它只会变得更糟。@ildjarn:这(令人惊讶地)只是一个允许的优化,而不是必需的,所以从技术上讲,这取决于您特定的编译器。我看不出有什么不同。也就是说,我知道在MSVC2010中,给定tfoo(tx)
,如果你做了{return x;}
它会删除复制/移动,但是如果你做了{return std::move(x);}
它会移动构造,永远不会删除。如果你问我的话,这有点傻。就我个人而言,我不会在任何一个括号中使用外括号:返回A?b:c代码>每次我看到return(x)时,我希望我是一个更暴力的人。唯一的区别是,你应该在任何充斥着前者的代码库中尖叫。请不要在你的问题标题中添加连字符。它不会改变它的排序顺序或任何东西。它所做的一切都破坏了搜索功能。