c++中一些个人不太熟悉的关键字

本文详细解释了C++中的三个重要关键字:volatile确保变量值不被编译器优化且每次读取都是最新值;explicit用于禁止隐式转换,避免意外的数据类型变化;decltype用于获取表达式的类型,有助于编写更安全可靠的代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

volatile
  • 字面意思:可变的
  • 确保本条指令不会因编译器的优化而省略,且要求每次直接读值。
  • 一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。
  • 一个参数既可以是const还可以是volatile
  • 使用场合
    • 并行设备的硬件寄存器
    • 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)
    • 多线程应用中被几个任务共享的变量
    explicit
    • 作用:禁止一个类的隐式拷贝
    • 示例:
      • class Test1
        {
        public:
            Test1(int n)
            {
                num=n;
            }//普通构造函数
        private:
            int num;
        };
        class Test2
        {
        public:
            explicit Test2(int n)
            {
                num=n;
            }//explicit(显式)构造函数
        private:
            int num;
        };
        int main()
        {
            Test1 t1=12;//隐式调用其构造函数,成功
            Test2 t2=12;//编译错误,不能隐式调用其构造函数
            Test2 t2(12);//显式调用成功
            return 0;
        }
    constexpr
    • const expression  常量表达式
      • constexpr int a = 20;
        • 让编译器去验证a是否是产量,不是的话报错。
      decltype
      • 获得表达式的类型
        • int a;
          decltype(a)  b;
          decltype(func(b))  c;
        • 可以对自定义类型使用
          • class A{};
            A a;
            decltype(A)  a2;
          • 和类型萃取的区别
            • 类型萃取是一堆获取类型数据的接口
            评论
            添加红包

            请填写红包祝福语或标题

            红包个数最小为10个

            红包金额最低5元

            当前余额3.43前往充值 >
            需支付:10.00
            成就一亿技术人!
            领取后你会自动成为博主和红包主的粉丝 规则
            hope_wisdom
            发出的红包
            实付
            使用余额支付
            点击重新获取
            扫码支付
            钱包余额 0

            抵扣说明:

            1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
            2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

            余额充值