c++的一些不常见关键字

作者: cpp加油站 | 来源:发表于2018-07-27 11:38 被阅读2次

    1. explicit关键字

    explicit用来防止由构造函数定义的隐式转换,比如:
    class Base base=10;
    即Base类只有一个int类型的变量,explicit使用了以后,就不允许这样写。
    被声明为explicit的构造函数通常比非explicit的构造函数更受欢迎,因为它们禁止编译器执行非预期的类型转换。

    2. volatile关键字

    volatile变量是随时可能发生变化的,它告诉编译器,与volatile变量有关的运算,不要进行任何优化,每次读取volatile变量时都重新从内存读取,不会有临时寄存器来存放变量的值。
    volatile可以适用于基础类型,例如:
    int,char,long......
    也适用于C的结构和C++的类。当对结构或者类对象使用volatile修饰的时候,结构或者类的所有成员都会被视为volatile.

    一般的在多线程环境中,涉及到某些变量同步的操作时,使用volatile会更好;

    3. mutable关键字

    mutable用于类的非静态和非常量数据成员,一般类的成员函数被声明为const,就表示不会修改类的数据成员,但如果要在常成员函数中修改类的非静态和非常量数据成员,则可以使用mutable修饰该数据成员,如下:

    class demo
    {
    public:
        int getCnt() const
        {
            m_nCount++;
            return m_nCount;
        }
    
    private:
        int m_nCount;
    };
    

    编译会报错:test.cpp:13: 错误:increment of data-member ‘demo::m_nCount’ in read-only structure,但如果改为如下代码:

    class demo
    {
    public:
        int getCnt() const
        {
            m_nCount++;
            return m_nCount;
        }
    
    private:
        mutable int m_nCount;
    };
    

    则编译通过。

    相关文章

      网友评论

        本文标题:c++的一些不常见关键字

        本文链接:https://www.haomeiwen.com/subject/bcbwmftx.html