博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ [[attribute]]
阅读量:6238 次
发布时间:2019-06-22

本文共 1259 字,大约阅读时间需要 4 分钟。

考虑下面的代码:

int x=1;switch (x){case 1:   std::cout << "x==1" << std::endl;case 2:   std::cout << "x<=2" << std::endl;   break;case 3:   std::cout << "x==3" << std::endl;   break;}

case 1:是否忘记书写break;还是有意放过,意图继续执行case 2?编译器当然不会弄明白了,就报告一个警告。

传统的解决方法是(VS环境):

#pragma warning( push )

#pragma warning( disable : 4705 )
// Some code
#pragma warning( pop ) 

把代码弄了个大花脸。现在有C++17的现代方式:

int x=1;switch (x){case 1:   std::cout << "x==1" << std::endl;   [[fallthrough]];case 2:   std::cout << "x<=2" << std::endl;   break;case 3:   std::cout << "x==3" << std::endl;   break;}

考虑如下代码: 

int main(){    bool b=true;}

编译器会warning警告b未使用。有许多传统技术解决这个问题,例如VS的UNREFERENCED_PARAMETER不具有可移植性。C++17带来了可移植的:

int main(){[[maybe_unused]] bool b=true;}

标记过时的程序实体:过时的函数,类,变量等。传统做法是用编译器厂家独特的指令。

#if GCC_VERSION_AT_LEAST(3,1)#    define attribute_deprecated __attribute__((deprecated))#elif defined(_MSC_VER)#    define attribute_deprecated __declspec(deprecated)#else#    define attribute_deprecated#endifattribute_deprecated void old_function(int);

C++17 的现代化机制:

[[deprecated]] void old_function(){}int main(){         old_function();  //警告您正在使用过时函数}

还有其它稀奇古怪的属性,待研究:

[[noreturn]]

[[carries_dependency]]
[[optimize_for_synchronized]]   这些都是什么鬼?

 

转载于:https://www.cnblogs.com/thomas76/p/8557690.html

你可能感兴趣的文章
windows:查看进程路径及PID,并杀掉进程
查看>>
JSP语法之八大隐式对象
查看>>
我的友情链接
查看>>
jumpserver的部署
查看>>
Python读写配置文件的实际操作步骤解析
查看>>
112 - Tree Summing
查看>>
sicily 1151. 魔板[Special judge]
查看>>
LNMP——搭建
查看>>
matlab-基础 class 获取变量的类型
查看>>
去IBM面试后的感受
查看>>
Linux基础入门及系统管理01-Linux用户管理命令详解11
查看>>
TurboMail邮件服务器飞邮手机邮箱全新更新抢先睇
查看>>
《Java虚拟机原理图解》3、JVM运行时数据区
查看>>
mysql使用规范-行为规范
查看>>
python函数
查看>>
我的友情链接
查看>>
Expect的安装配置及简单测试脚本
查看>>
HBase Compact && Split
查看>>
我的友情链接
查看>>
OA系统失败之一技术缺陷
查看>>