Position du mot clé volatile dans la déclaration de la fonction membre en C ++

Le positionnement du mot clé 'volatile' dans une déclaration de méthode affecte-t-il sa fonctionnalité?

c'est-à-dire, existe-t-il une différence entre les deux morceaux de code suivants?

UNE.

class Test
{
public:
    volatile void testMe() 
    {
    }
};

B.

class Test
{
public:
    void testMe() volatile 
    {
    }
};

Et il en va de même lorsque la fonction membre a une valeur de retour. Je vous remercie!

0

2 Réponses

Les mêmes règles que celles qui s'appliquent à const s'appliquent à volatile .

En retournant void (plutôt que de ne pas retourner), volatile est inutile dans le premier extrait.

Le deuxième extrait marque la méthode entière comme volatile .

Par exemple, si vous avez:

volatile Test m;
m.testMe();

seulement compiles est testMe est marqué comme volatile (comme votre second code).

0
ajouté

C'est la même chose que pour le qualificateur const .

Dans le premier exemple, le volatile s'applique à la valeur de retour de la fonction. C'est nul dans ce cas, donc cela n'a pas beaucoup de sens. En fait, cela n'a pas beaucoup de sens de revenir en valeur volatile * . Un type de retour volatile n'aurait de sens que pour une référence:

volatile int& foo() { ... }
volatile int& i = foo();//OK
int j = foo();//OK, use the volatile reference to construct a non volatile int
int& j = foo();//Error!

Dans le second cas, cela signifie que la méthode est volatile , donc elle peut être appelée sur les instances et non volatiles de la classe test (non-const) . Une méthode similaire sans le qualificateur volatile n'a pas pu être appelée sur une instance volatile .

Test test0;
test0.testMe();//OK
volatile Test test1;
test1.testMe();//OK
test1.someNonVolatileMethod();//Error.

*Unless that value is a pointer

0
ajouté
Il peut également être judicieux de renvoyer un type de classe volatile par valeur afin que seules les fonctions membres volatiles puissent être appelées sur le temporaire. Je ne dis pas que j'ai jamais vu ça, mais cela semble raisonnable.
ajouté l'auteur edA-qa mort-ora-y, source
@ edA-qamort-ora-y je dois sérieusement penser à celui-là. Je suppose que vous avez identifié un cas où il diffère de const , où une valeur de retour const gâcherait la sémantique de déplacement.
ajouté l'auteur juanchopanza, source