2017-06-13 128 views
6

[expr.ref]/1到底是什麼在[expr.ref]/1中提到的腳註的含義是什麼?

後綴表達式後面跟着一個點.或箭頭->,任選接着進行關鍵字template(17.2), 然後接着是ID-表達,是一個後綴表達式。評估點或箭頭 之前的後綴表達式; 該評價的結果,與ID-表達一起,確定了整個 後綴表達式的結果。

67)如果類成員訪問表達式,子表達式評估發生即使結果不需要 確定整個後綴表達式的值,例如如果ID-表達表示靜態成員。

回答

6

如果一個成員被定義爲static,那麼這個成員只有一個該類的副本,而不是該類的每個實例的一個副本。靜態成員可以通過類的實例(對象)來引用。腳註闡明瞭鑑定實例的表達式求值(和任何副作用發生),即使你不需要知道你所訪問了解靜態成員的值實例對象。

一個例子:

#include <iostream> 

class foo { 
    public: 
     static int s; 
}; 

int foo::s = 42; 

int index() { 
    std::cout << "index returns 5\n"; 
    return 5; 
} 

int main() { 
    foo arr[10]; 
    std::cout << arr[index()].s << "\n"; 
} 

這裏只有一個s對象,並且它的值是42,但表達arr[index()]仍然評價,即使是不需要它的結果來確定的s值。

輸出是:

index returns 5 
42 
+0

感謝。不能說得更清楚。 – Alexander