1

メソッド宣言での「volatile」キーワードの配置は、その機能に影響しますか?

つまり、次の 2 つのコードに違いはありますか?

A.

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

B.

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

メンバー関数に戻り値がある場合も同様です。ありがとうございました!

4

2 に答える 2

5

const予選と同じです。

最初の例でvolatileは、関数の戻り値に適用されます。この場合は無効なので、あまり意味がありません。実際、 volatile 値*で返すのはあまり意味がありません。揮発性の戻り値の型は、参照に対してのみ意味があります。

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!

2 番目のケースでは、メソッドが であることを意味するvolatileため、クラス の (非 const) 不揮発性および揮発性インスタンスで呼び出すことができますTest。修飾子のない同様のメソッドは、インスタンスvolatileで呼び出すことができませんでした。volatile

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

*その値がポインタでない限り

于 2012-05-24T07:18:55.813 に答える
3

に適用されるのと同じルールが適用されconstますvolatile

戻るときvoid(むしろ返さない)volatileは、最初のスニペットでは役に立ちません。

2 番目のスニペットは、メソッド全体を としてマークしvolatileます。

たとえば、次の場合:

volatile Test m;
m.testMe();

コンパイルのみtestMeがマークされていvolatileます(2番目のコードのように)。

于 2012-05-24T07:17:08.250 に答える