栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

从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,从而改变了语义。故事的寓意-“并非所有返回类型的括号都相等”



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/428653.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号