方法聲明中'volatile'關鍵字的位置是否影響其功能?C++中成員函數聲明中volatile關鍵字的位置
即,以下兩段代碼是否有區別?
A.
class Test
{
public:
volatile void testMe()
{
}
};
B.
class Test
{
public:
void testMe() volatile
{
}
};
而且也是一樣,當成員函數返回值。謝謝!
方法聲明中'volatile'關鍵字的位置是否影響其功能?C++中成員函數聲明中volatile關鍵字的位置
即,以下兩段代碼是否有區別?
A.
class Test
{
public:
volatile void testMe()
{
}
};
B.
class Test
{
public:
void testMe() volatile
{
}
};
而且也是一樣,當成員函數返回值。謝謝!
它與const
限定符相同。
在第一個示例中,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!
在第二種情況下,這意味着,該方法是volatile
,因此它可以在被調用(非const)非易失性和揮發性類Test
的實例。沒有volatile
限定符的類似方法無法在volatile
實例上調用。
Test test0;
test0.testMe(); // OK
volatile Test test1;
test1.testMe(); // OK
test1.someNonVolatileMethod(); // Error.
*除非該值是一個指針
適用於const
的相同規則適用於volatile
。
當返回void
(而不是返回)時,volatile
在第一個片段中沒有用處。
第二個片段將整個方法標記爲volatile
。
例如,如果您有:
volatile Test m;
m.testMe();
只編譯爲testMe
被標記爲volatile
(如你的第二個代碼)。
這也是有道理的值返回揮發性類類型,這樣只有揮發性的成員函數可以在臨時調用。我不是說我見過這個,但看起來似乎合理。 –
@ edA-qamort-ora-y我必須認真思考那個問題。我想你已經確定了一個不同於'const'的情況,其中'const'返回值會擾亂語義。 – juanchopanza