訪問和更改值的私有成員:更改私有類成員的類
#include <stdio.h>
class hack_Me
{
private:
size_t age;
public:
size_t getAge() const
{
return this->age;
}
explicit hack_Me(size_t age):age(age) { }
};
void change_age(hack_Me* h)
{
*((int*)h) = 100;
}
int main(int argc, char* argv[])
{
hack_Me h(12);
printf("%d \n", h.getAge());
change_age(&h);
printf("%d \n", h.getAge());
getchar();
return 0;
}
它打印出它適用於MSVC 14
100後12
這種行爲是不確定的和/或編譯器依賴?
更新:StackOverflow是否爲您提供downvotes積分?
c沒有課程,請刪除c標記 –
類似這樣的問題正在等待錯誤,因爲演員完全跳過了任何編譯器檢查。爲什麼不''void change_age(hack_Me * h){* h = hack_Me(100); }'? – zett42