(C++) 属性说明符-语法

文章目录

  • 前言
  • 语法
    • 🏷️非标准语法
      • ⭐GCC
      • ⭐MSVC
    • 🏷️`[[ 属性列表 ]]` (C++11 起)
      • ⭐标识符
      • ⭐属性命名空间::标识符
      • ⭐标识符(实参列表 (可选) )
      • ⭐同时多个属性
    • 🏷️`[[ using 属性命名空间 : 属性列表 ]]` (C++17 起)
    • 🏷️解释
      • ⭐[[语法解析
  • END

前言

cppref: 属性说明符序列(C++11 起) - cppreference.com

本文着重讲解属性说明符的语法

属性说明符是一种与具体编译器强绑定的内容。有的属性可以作为编译器的提示,有的则是直接作为设置。

在C++11之前,不同编译器拥有不同的语法,不同的说明符。在编写跨平台程序时非常麻烦,移植性一直不是很好。

到了C++11标准终于规定了属性说明符的标准。但是所支持的说明符随着标准的提出还不是很多。但该语法仍然允许使用编译器自身的说明符,为以后的扩展做了一定的预留。

语法

属性可用在 C++ 程序中的几乎所有位置,而且可应用于几乎所有事物:类型、变量、函数、名字、代码块、整个翻译单元,不过每个特定的属性都只在实现允许范围内有效

属性说明符可以标识在绝大多数地方,有的地方顺序并不影响功能,但有些地方确有不同的作用。

但也有部分地方会导致无法编译。

🏷️非标准语法

非标准语法强依赖于编译器,需要记住特定的对应关系。

⭐GCC

语法:

__attribute__((属性))

示例:

__attribute__((noreturn)) void test() {}

⭐MSVC

语法:

__declspec(属性)

示例:

__declspec(noreturn) void test() {}

🏷️[[ 属性列表 ]] (C++11 起)

  • 标识符
  • 属性命名空间::标识符
  • 标识符(实参列表 (可选) )
  • 属性命名空间::标识符 ( 实参列表 (可选) )

⭐标识符

[[noreturn]] void test() {}

⭐属性命名空间::标识符

[[gnu::always_inline]] void test() {}

⭐标识符(实参列表 (可选) )

// C++14
[[deprecated("This fun is deprecated")]] void test() {}

⭐同时多个属性

分开写:

[[noreturn]] [[gnu::always_inline]] void test_separate() {}

合并写:

[[noreturn, gnu::always_inline]] void test_merge() {}

🏷️[[ using 属性命名空间 : 属性列表 ]] (C++17 起)

[[using gnu: always_inline, const]] void test() {}

🏷️解释

⭐[[语法解析

[[在语法解析的时候具有非常强大的吸引力。

]]并不会有什么问题。

int main() {int arr[114514] = {};// OK Pass// 属性可以是空// ]] 解析没问题[[]];arr[0 [arr]] = 1;// Error// [[的吸引力很强,会优先解析为属性说明符// arr[[] { return 0; }()] = 1;
}

END

ref:【每天5分钟了解现代C++新特性 - 第31章 属性说明符和标准属性】

关注我,学习更多C/C++,算法,计算机知识

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/576106.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【计算机网络】http协议的原理与应用,https是如何保证安全传输的

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《电-碳联合市场下发电商激励性竞价策略》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

Chrome之解决:浏览器插件不能使用问题(十三)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

Wireshark自定义协议解析器插件C语言开发

文章目录 概要Wireshark 软件整体架构基本概念解析器实现逻辑解析器编译环境搭建软件编译过程 概要 Wireshark是一款全球使用与开发维护人数最多的遵循GPL协议开源的网络协议分析软件,全球开发者为Wireshark编写了数千种协议的解析插件。 在实际的工作中&#xff0…

C语言 C6031:返回值被忽略:“scanf“ 问题解决

我们在代码中 直接使用 scanf 就会出现这个错误 在最上面 加上 #define _CRT_SECURE_NO_WARNINGS//禁用安全函数警告 #pragma warning(disable:6031)//禁用 6031 的安全警告即可正常运行

安防监控视频汇聚平台EasyCVR在银河麒麟V10系统中的启动异常及解决方法

安防监控视频平台EasyCVR具备较强的兼容性,它可以支持国标GB28181、RTSP/Onvif、RTMP,以及厂家的私有协议与SDK,如:海康ehome、海康sdk、大华sdk、宇视sdk、华为sdk、萤石云sdk、乐橙sdk等。平台兼容性强,支持Windows系…

R语言批量计算t检验,输出pvalue和均值

1.输入数据如下&#xff1a; 2.代码如下 setwd("E:/R/Rscripts/rG4相关绘图") # 读取CSV文件 data <- read.csv("box-cds-ABD-不同类型rg4-2.csv", stringsAsFactors FALSE)# 筛选出Type2列为指定五种类型的数据 filtered_data <- subset(data, …

【Effective Web】页面优化

页面优化 页面渲染流程 JavaScript 》 Style 》 Layout 》 Paint 》 Composite 首先js做了一些逻辑&#xff0c;触发了样式变化&#xff0c;style计算好这些变化后&#xff0c;把影响的dom元素进行重新布局&#xff08;layout&#xff09;,再画到画布中&#xff08;Paint&am…

星光/宝骏/缤果/长安 车机CarPlay手机操作破解教程V2.0版本(无需笔记本、无需笔记本、无需笔记本)

之前写了个1.0版本&#xff0c;由于太局限&#xff0c;需要用到笔记本才能操作&#xff0c;很多车友反馈不方便。特此出个手机版教程&#xff0c;简单easy&#xff0c;妈妈再也不用担心我搞不定啦 一、准备工作 先卸载车机上的autokit 或者 智能互联 app&#xff0c;这步很关…

linux shell命令(进程管理、用户管理)

一、进程的概念 主要有两点&#xff1a; 1.进程是一个实体。每一个进程都有它自己的地址空间&#xff0c;一般情况下&#xff0c;包括文本区域&#xff08;text region&#xff09;、数据区域&#xff08;data region&#xff09;和堆栈&#xff08;stack region&#xff09;…

Git命令上传本地项目至github

记录如何创建个人仓库并上传已有代码至github in MacOS环境 0. 首先下载git 方法很多 这里就不介绍了 1. Github Create a new repository 先在github上创建一个空仓库&#xff0c;用于一会儿链接项目文件&#xff0c;按照自己的需求设置name和是否private 2.push an exis…

基于Spring boot + Vue协同过滤算法的电影推荐系统

末尾获取源码作者介绍&#xff1a;大家好&#xff0c;我是墨韵&#xff0c;本人4年开发经验&#xff0c;专注定制项目开发 更多项目&#xff1a;CSDN主页YAML墨韵 学如逆水行舟&#xff0c;不进则退。学习如赶路&#xff0c;不能慢一步。 目录 一、项目简介 二、开发技术与环…