(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://xiahunao.cn/news/2905123.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

图解Dijkstra和Bellman-Ford的流程以及证明

说到寻路,在游戏里面应用最多的自然还是A寻路,但是这篇文章不讨论A寻路,主要是介绍Dijkstra和Bellman-Ford,因为这两个寻路核心代码少,但是正确性却不容易直接看出来,网上的博客也基本都是画步骤告诉大家怎…

Linux内核之最核心数据结构之一:struct file(三十)

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

产品SDK化转型:标准化与机构个性化定制解决方案

一、背景 在互联网行业中,企业通常可分为两大类别:2C和2B。对于2B企业而言,它们的产品往往以产品的形式提供给各个合作机构。以金融领域为例,一家2B金融公司通常将产品销售给各个银行和证券公司,这是2B领域常见的做法…

2.11 Python关键字(保留字)

Python关键字(保留字)一览表 保留字是Python 语言中一些已经被赋予特定意义的单词,这就要求开发者在开发程序时,不能用这些保留字作为标识符给变量、函数、类、模板以及其他对象命名。 Python 包含的保留字可以执行如下命令进行…

企业网站建设的方法的相关问题的解决办法的问题

现在市场上比较大的公司都建立了自己的企业网站,比如华为、小米等,在他们的企业网站中,可以充分展示自己产品的优势,介绍公司的优质服务。 这都是让顾客改变购买想法的重要因素。 现在互联网发达了,很多人在购买产品的…

k8s局域网通过operator部署rabbitmq

参考:Installing RabbitMQ Cluster Operator in a Kubernetes Cluster | RabbitMQ 1、下载cluster-operator.yml wget https://github.com/rabbitmq/cluster-operator/releases/download/v2.7.0/cluster-operator.yml 2、拉取对应的镜像,这里的版本是根…

腾讯云4核8g服务器多少钱?2024轻量和CVM收费价格表

2024年腾讯云4核8G服务器租用优惠价格:轻量应用服务器4核8G12M带宽646元15个月,CVM云服务器S5实例优惠价格1437.24元买一年送3个月,腾讯云4核8G服务器活动页面 txybk.com/go/txy 活动链接打开如下图: 腾讯云4核8G服务器优惠价格 轻…

最优算法100例之10-数组中重复出现多次的数

专栏主页:计算机专业基础知识总结(适用于期末复习考研刷题求职面试)系列文章https://blog.csdn.net/seeker1994/category_12585732.html 题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不…

安全的内网通讯软件,WorkPlus定制化 IM/办公门户解决方案

如今处于数字化转型的“加速期”,政企正经历着一场数字化迭代升级的时代浪潮。而不少企业都已具备了数字化管理的意识,数字化应用场景也在全面推开。WorkPlus不断推动信息技术与企业业务深度融合,作为安全的内网通讯软件,为企业提…

【算法刷题 | 二叉树 05】3.28(左叶子之和、找树 左下角的值)

文章目录 11.左叶子之和11.1问题11.2解法一:递归11.2.1递归思路11.2.2代码实现 11.3解法二:栈11.3.1栈思想11.3.2代码实现 12.找树左下角的值12.1问题12.2解法一:层序遍历 11.左叶子之和 11.1问题 给定二叉树的根节点 root ,返回…

|行业洞察·汽车|《2024新能源汽车行业及营销趋势报告-20页》

报告的主要内容解读: 新能源汽车行业概述及品牌分布: 近年来,中国新能源汽车销量增速高,市场占有率快速提升,成为汽车行业的重要增量。新能源汽车消费者趋向年轻化、女性化和高端化,对高科技、新体验有较高…

LeetCode:718最长重复子数组 C语言

718. 最长重复子数组 提示 给两个整数数组 nums1 和 nums2 ,返回 两个数组中 公共的 、长度最长的子数组的长度 。 示例 1: 输入:nums1 [1,2,3,2,1], nums2 [3,2,1,4,7] 输出:3 解释:长度最长的公共子数组是 [3,…

解决:npx nuxi@latest module add image 问题

背景 在 nuxtJS项目中使用内置组件 NuxtImg , 按照官方操作如下图进行安装,在npm run dev 时,出现了报错: "ipx" is imported by "node_modules/nuxt/image/dist/runtime/ipx.mjs", but could not be resolved – treat…

Unity 学习日记 12.小球撞击冰块游戏

目录 1.准备场景 2.让小球动起来 3.用鼠标把小球甩出去 4.加入鼠标点击小球的判断 5.小球与冰块的碰撞测试 6.撞击后销毁冰块 ​编辑 7.显示游戏计时 8.显示扔球次数 9.显示剩余冰块个数 10.游戏结束 11.完整代码 下载源码 UnityPackage 最终效果: 1.准…

机器学习(三)

神经网络: 神经网络是由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实世界物体所作出的交互反应。 f为激活(响应)函数: 理想激活函数是阶跃函数,0表示抑制神经元而1表示激活神经元。 多层前馈网络结构: BP(误差逆…

Git命令上传本地项目至github

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

步态采集平台

🍉步骤一、读取视频每一帧图像 🍉步骤二、对读取的图像进行分割,得到全景下的步态轮廓图。 ​​​​​​​🍉步骤三、对读取的图像进行裁剪得到归一化的步态轮廓图。 ​​​​​​​🍉步骤四、保存这一帧步态轮廓图

MongoDB Atlas维护指南:常见类型、注意事项与窗口设置

为了给Atlas用户更好的产品体验,MongoDB产品团队会进行定期维护。 本文将会介绍: 常见维护项目种类及频率,注意事项维护期间的影响及建议维护窗口设置说明维护告警设置和邮件通知范例 维护窗口常见项目 定期SSL证书轮换软件升级&#xff…

Git--08--Git分支合并操作

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 Git分支合并操作案例流程客户端:GitExtensions操作步骤:A操作步骤:B操作步骤:C操作步骤:D操作步骤&#…

多焦点图像融合文献学习(一)

本文介绍的是一篇明为"A convolutional neural network-based conditional random field model for structured multi-focus image fusion robust to noise."的文献,主要包括文献的摘要、前言摘选、主要贡献、网络结构、实验结果及结论等方面。 文献名称摘…