当前位置: 首页 > news >正文

网站建设报名系统是真的吗买链接官网

网站建设报名系统是真的吗,买链接官网,四川省人民政府2024年森林防火命令,深圳开发网站建设哪家好文章目录前言弃值表达式nodiscard标记符函数非弃值声明类/枚举类/结构 非弃值声明返回类引用与类指针前言 在C 17中引入了一个标记符nodiscard,用于声明一个 “非弃值(no-discard)表达式”。那么在开始之前,我们需要了解一下什么是弃值表达式。 弃值表…

文章目录

  • 前言
  • 弃值表达式
  • nodiscard标记符
    • 函数非弃值声明
    • 类/枚举类/结构 非弃值声明
    • 返回类引用与类指针

前言

在C++ 17中引入了一个标记符nodiscard,用于声明一个 “非弃值(no-discard)表达式”。那么在开始之前,我们需要了解一下什么是弃值表达式。

弃值表达式

弃值表达式,就是放弃获取返回值的表达式。首先弃值表达式的返回值是非void类型的。一般,我们使用的弃值表达式,其返回值只是起次要的作用,而其本身的作用占主要。比如++i;就是一个弃值表达式,它的主要作用就是累加,但同时我们也可以选择获取其累加的返回值,只不过这是次要的。

再比如,C标准库的文件写入函数,其声明如下:

int __cdecl fputs(const char * __restrict__ _Str,FILE * __restrict__ _File);

它有一个int类型的返回值,用于获取写入状态,它的主要作用是写入文件,我可以选择不获取状态,也可以选择获取状态:

fputs("Hello World",pFile);
int result = fputs("Hello World",pFile);

nodiscard标记符

那么我如果想向用户建议获取返回值,这时候,我就可以使用nodiscard标记符。它一般用于标记函数的返回值或者某个类。声明语法为:

/* @since C++17 */
[[nodiscard]] return_type function();
/* @since C++20 */
[[nodiscard("message")]] return_type  function();
/* Standard lib defination */
/*  #if __cplusplus >= 201703L# define _GLIBCXX_NODISCARD [[__nodiscard__]]#else# define _GLIBCXX_NODISCARD#endif
*/
_GLIBCXX_NODISCARD return_type  function();

如果一个被nodiscard标记了的表达式,如果我们在使用时弃值了,而且没有使用static_cast<void>将其转化为void时,编译器会抛出warning来提醒用户获取返回值。

函数非弃值声明

[[nodiscard]] int func1(){return 1;
}[[nodiscard("nodiscared function")]] int func2(){return 1;
}int main(){func1();                         //warning C++17func2();                         //warning c++20int a = func1();                 //no warningstatic_cast<void>(func1());      //no warning
}

结果如下:
在这里插入图片描述

类/枚举类/结构 非弃值声明

class [[nodiscard]] A{};
enum class [[nodiscard]] B{X,Y};
struct [[nodiscard]] C{};A createA(){return A();
}B createB(){return B::X;
}C createC(){return C();
}int main(){createA();createB();createC();
}

输出如下:

6.cpp: In function 'int main()':
6.cpp:22:12: warning: ignoring returned value of type 'A', declared with attribute 'nodiscard' [-Wunused-result]22 |     createA();|     ~~~~~~~^~
6.cpp:10:3: note: in call to 'A createA()', declared here10 | A createA(){|   ^~~~~~~
6.cpp:6:21: note: 'A' declared here6 | class [[nodiscard]] A{};|                     ^
6.cpp:23:12: warning: ignoring returned value of type 'B', declared with attribute 'nodiscard' [-Wunused-result]23 |     createB();|     ~~~~~~~^~
6.cpp:14:3: note: in call to 'B createB()', declared here14 | B createB(){|   ^~~~~~~
6.cpp:7:26: note: 'B' declared here7 | enum class [[nodiscard]] B{X,Y};|                          ^
6.cpp:24:12: warning: ignoring returned value of type 'C', declared with attribute 'nodiscard' [-Wunused-result]24 |     createC();|     ~~~~~~~^~
6.cpp:18:3: note: in call to 'C createC()', declared here18 | C createC(){|   ^~~~~~~
6.cpp:8:22: note: 'C' declared here8 | struct [[nodiscard]] C{};|                      ^

返回类引用与类指针

当返回值为引用或者指针的 类/枚举类/结构(函数不行) 时,nodiscard 就无效了:

class [[nodiscard]] A{};A& createAref(){A* a = new A();return *a;
}A* createAptr(){A* a = new A();return a;
}int main(){createAref(); //no warningcreateAptr(); //no warning
}
http://www.ritt.cn/news/14233.html

相关文章:

  • 企业网站内容的制作代写文章接单平台
  • php 怎么做 网站 图片云南网络营销seo
  • 上海企业网站建设制作淘宝seo搜索排名优化
  • wordpress生成推广链接重庆白云seo整站优化
  • 使用word做网站百度百度一下你就知道
  • 万网客服网络搜索引擎优化
  • 商标设计找哪里北京网站优化公司哪家好
  • 做自己的网站长沙网络公司排名
  • 做ppt时网站怎么设计交换友情链接推广法
  • 滁州做网站价格提升seo排名
  • 高端网站建设汉狮团队百度导航和百度地图
  • 个人网站可以做评论功能吗佛山网站seo
  • 从音乐网站下载歌曲做铃音要收费吗广州优化疫情防控举措
  • 怎么自己做网站吗重庆黄埔seo整站优化
  • 做沙盘实训在哪个网站做seo哪家公司好
  • 营销型网站建设制作多少钱所有的竞价托管公司
  • 怎么在vps上做网站中国有几个搜索引擎
  • 如何做网站架构广州营销推广
  • 网站内链怎么做网店运营是做什么的
  • 做粉丝网站福州搜索引擎优化公司
  • 新沂网站开发今天中国新闻
  • 怎么做网站首页关键词推广引流话术
  • 如何查询网站哪个公司做的百度关键词相关性优化软件
  • wordpress远程图片上海抖音seo公司
  • 深圳专业网站建设排名磁力屋torrentkitty
  • 济南语委网站种子库
  • 做蛋糕需要建议网站不外贸建站推广哪家好
  • 哈尔滨响应式网站建设公司外包服务公司
  • 福州市做公司网站哪家好爱站网长尾关键词挖掘查询工具
  • 厦门市建设合同备案网站拼多多怎么查商品排名