Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 抛弃volatile关键字在这里有意义吗?_C++_Arduino_Volatile - Fatal编程技术网

C++ 抛弃volatile关键字在这里有意义吗?

C++ 抛弃volatile关键字在这里有意义吗?,c++,arduino,volatile,C++,Arduino,Volatile,我有一个类实例,它可以与volatile关键字一起使用,也可以不与volatile关键字一起使用: class C {}; volatile C v_c; C nv_c; 现在,我提出了以下构造来编写同时适用于易失性和非易失性实例的方法: class C { public: void method() { methodQualified(false); }; void method() volatile { methodQualified(); };

我有一个类实例,它可以与volatile关键字一起使用,也可以不与volatile关键字一起使用:

class C {};
volatile C v_c;
C nv_c;
现在,我提出了以下构造来编写同时适用于易失性和非易失性实例的方法:

class C {
    public:
        void method() { methodQualified(false); };
        void method() volatile { methodQualified(); };
    private:
        void methodQualified(bool volatileSelf = true) volatile {
            auto& nqThis = volatileSelf ? *this : *const_cast<C*>(this);                
            // Do stuff with nqThis
        }
};
C类{
公众:
void method(){methodQualified(false);};
void method()volatile{methodQualified();};
私人:
void methodQualified(bool volatileSelf=true)volatile{
auto&nqThis=volatileSelf?*此:*const_cast(此);
//用nqThis做些事情
}
};

但是现在我想知道
methodQualified(false)
调用是否/如何改变编译器在易失性/非易失性实例上方法调用的行为。这个构造有意义吗?其基本思想是,只有在必要时使用volatile才有潜在的性能损失。这是为Arduino编写的代码。

您可以检查生成的代码以查看编译器的功能。[编译器资源管理器](godbolt.org/)可以在线完成。为什么首先需要它是易失性的?把volatile放在后面扔掉似乎很奇怪…@OznOg我有一个类,它表示从ISR和主代码访问的数据(所以我使用volatile实例),而在其他地方,这些实例只是从主代码访问的(所以不需要volatile)。@Someprogrammerdude Thx,我试图通过godbolt找到一些东西,但是我需要一些帮助。在ESP8266上为Arduino开发时,我应该选择什么编译器?首先,我选择了这个选项,看起来似乎相同的代码用于易失性和非易失性访问。在这方面有更深入的见解的人能证实这一点吗?@x-ray不,这没有意义,
auto
仍然是编译时类型,它只有一种类型。(嗯,类型只在编译时存在,但希望您理解我的观点)