当前位置: 首页 > 面试题库 >

在返回语句中,结果的括号是否有意义?

司马奇希
2023-03-14
问题内容

函数内部的这两个语句之间有区别吗?

bool returnValue = true;
// Code that does something
return(returnValue);

还有这个?

bool returnValue = true;
// Code
return returnValue;

前者周围有括号returnValue


问题答案:

从C 14开始,它们经常是。C 14增加了一种边缘情况,其中返回值周围的括号可能会改变语义。此代码段显示了要声明的两个函数。唯一的区别是在返回值两边加上括号。

int var1 = 42;
decltype(auto) func1() { return var1; } // return type is int, same as decltype(var1)
decltype(auto) func1() { return(var1); } // return type is int&, same as decltype((var1))

在第一个中func1返回int,在第二个中func1返回int&。语义上的差异与周围的括号直接相关。

autoC 11中引入了最新形式的说明符。在C 语言规范中,它描述为:

指定要从其初始值设定项自动推断出要声明的变量的类型。对于函数,指定返回类型为尾随返回类型,或从其返回语句中推论得出(自C ++ 14起)

同样,C 11引入了decltype在C 语言规范中描述的说明符:

检查实体的声明类型或查询表达式的返回类型。

[片段]

如果参数是对象/函数的未括号名称,或者是成员访问表达式(object.member或pointer-> member),则decltype指定此表达式指定的实体的声明类型。

如果参数是类型T的任何其他表达式,则

a)如果表达式的值类别是xvalue,则decltype指定T &&

b)如果表达式的值类别为左值,则decltype指定T&

c)否则,decltype指定T

[片段]

请注意,如果将对象的名称加括号,则它成为左值表达式,因此decltype(arg)和decltype((arg))通常是不同的类型。

在C ++ 14中,decltype(auto)允许函数返回类型使用。原始示例是括号之间的语义差异起作用的地方。回顾原始示例:

int var1 = 42;
decltype(auto) func1() { return var1; } // return type is int, same as decltype(var1)
decltype(auto) func1() { return(var1); } // return type is int&, same as decltype((var1))

decltype(auto)允许从return语句上的实体/表达式推导函数中的尾随返回类型。在第一个版本中,return var1;它实际上与返回类型相同decltype(var1)(int上述规则1的返回类型),而在第二种情况下,return (var1);它实际上与返回类型(规则2bdecltype((var1))的int &返回类型)相同。

括号使返回类型int&代替int,从而改变了语义。故事的寓意-“并非所有返回类型的括号都相等”



 类似资料:
  • 问题内容: 假设我们在Python 3.x中(我猜在Python 2.6和Python 2.7中也)具有以下功能: 如果运行它们,我们将得到: 这三个函数提供相同的结果(值和类型),它们似乎是等效的。 但是,其中哪个陈述更正确? 这些定义中是否有副作用? 相同的问题适用于以下情况,并返回了多个值: 在这种情况下,每个函数都返回一个 元组 ,但是我的问题仍然保持不变。 问题答案: Python中的括

  • 问题内容: 我只是在浏览一个论坛,有人问他们在网上找到的PHP文件。在代码中有几个这样的地方: 我一直认为,如果条件为真,则需要用括号括起来。还有其他选择吗,例如您是否不在同一行? 还有另一行是这样的: 我的本能是说这行不通,但是我也不知道它是否是过时的PHP文件并且它曾经可以工作? 问题答案: 您可以执行以下其他语句: 然后您还可以编写if-else的替代语法: 使用备用语法,您也可以退出解析模

  • 问题内容: 如果我运行查询,例如: 即使查询与任何记录都不匹配,它也会始终返回结果吗?还是我需要验证并确保结果返回一行? 问题答案: 是的,因为它是一个聚合并且返回零。除非您添加GROUP BY,否则由于没有组,因此没有结果… 除非您添加GROUP BY,然后没有任何行,否则MAX / SUM等将返回NULL。只有COUNT传回没有结果的数字 编辑,有点晚:SUM会像MAX一样返回NULL 编辑,

  • 问题内容: 我曾经听说在JavaScript中将花括号放在单行语句中可能有害。我不记得这个推理了,谷歌搜索并没有太大帮助。 是否有什么使将JavaScript中的所有语句括在大括号中的好主意呢? 我问,因为每个人似乎都这样做。 问题答案: 没有 但是推荐。如果您要扩展该语句,则将需要它们。 这是完全有效的 但是,强烈建议您始终使用花括号,因为如果您(或其他人)曾经扩展过该语句,则将需要使用该花括号

  • 问题内容: 我试图更好地理解以下python代码以及作者为什么在返回中使用“ AND”语句。 进一步的代码… 我尝试检查返回给调用方的结果对象,但是我仍然不完全了解它是如何工作的。 似乎这将密码返回给调用者,并返回一个布尔值,表明密码是否有效,但是我不明白调用函数如何检查对象的布尔值?这是我错过的关于Python的基本知识吗? 在该示例旁边还有另一个类似用法的示例,但是它使用“或”语句,对我而言,

  • 我使用了以下映射:我修改了英语分析器来使用ngram分析器,如下所示,这样我应该能够在以下情况下进行搜索:1]部分搜索和特殊字符搜索2]以获得语言分析器的优势 将我的数据索引如下: