5.1.1/2中指出:這個尺寸是如何計算的?
關鍵字
this
名稱的指針 非靜態成員函數(9.3.2)被調用的量,對象或一個非靜態數據 構件的初始值(9.2)被評估。
和:
不像在其他情況下所述對象的表情,
*this
不 需要是完整的類型的成員函數體外類成員訪問 (5.2.5)的目的。
下面的代碼打印8
:
#include <cstddef>
#include <iostream>
struct Test
{
std::size_t sz = sizeof(this->sz);
};
int main()
{
std::cout << Test{}.sz;
}
5.3.3說:
該操作數是任一種的表達,這是一個未計算的操作數 (第5章),或一個加括號type-id。所述
sizeof
操作人員應 不能應用於具有功能或不完全 類型的表達式...
sizeof this->sz
具有相同的結果。
是this->
在這種情況下被認爲是無操作,它基本上相當於sizeof(sz)
?
實際上很少有(實際上)使用'this->'進行成員訪問會導致差異的情況,這不是其中之一。 – SergeyA
'(* this).sz'是一個完整的類型不是它,'std :: size_t'?你通過解決這個問題得到了它,但我不知道你爲什麼期望這個問題。 –