假設我有一兩個同軸函數的類:爲什麼允許內聯函數操作私有成員變量?
class Class {
public:
void numberFunc();
int getNumber() { return number; }
private:
int number;
};
inline void Class::numberFunc()
{
number = 1937;
}
我實例化類和我通話雙方的功能類:
int main() {
Class cls;
cls.numberFunc();
cout << cls.getNumber() << endl;
return 0;
}
我明白,內聯函數仍然但這也是我的理解,即內聯函數體內的代碼只是插入到它被調用的地方。看來,作爲插入的結果,我不應該能夠直接訪問成員變量number
,因爲據我所知,在main()
編譯器的代碼是這樣:
main() {
Class cls;
cls.number = 1937;
cout << cls.number << endl;
return 0;
}
燦有人向我解釋爲什麼我仍然可以訪問這些私人成員,或根據我對內聯函數的理解糾正我?我知道編譯器可以選擇在某些函數上忽略inline
;這裏發生了什麼?
輸出:
否 - 一致性編譯器不能做它想要的 - 訪問說明符在編譯的特定步驟中被評估 - 在它們沒有被再次檢查之後。 –
@AdrianCornish:只要它符合要求,編譯器就可以隨時撤銷訪問級別,只要它看起來就像在特定步驟中進行評估一樣。 –
不,它不能 - 給我看這個標題部分的內容嗎? –