物件資料成員的初始值
物件資料成員的初始值
物件的建構函式的作用是初始化類的成員變數,但是如果我們不顯式定義建構函式,編譯器就會給我們定義一個預設建構函式;這個預設建構函式中其實是什麼都沒有做的,如果這樣,我們生成該類的物件之後,它的資料成員值為多少呢?
具體程式如下:
#include <iostream>
using namespace std;
class Base{
public:
int val;
};
Base b;
int main()
{
Base c;
Base *base = new Base;
cout << "base->val is:" << base->val << endl;
cout << "b.val is:" << b.val << endl;
cout << "c.val is:" << c.val << endl;
}
編譯程式並多次執行上述程式,發現三次執行結果都不相同
base->val is:8002976
b.val is:0
c.val is:0
base->val is:7412416
b.val is:0
c.val is:0
base->val is:16325312
b.val is:0
c.val is:0
對上述程式執行結果分析可得出以下結論:
- 由於C++規定不顯式初始化的靜態變數和全域性變數應該初始化為0,因此靜態/全域性變數的資料成員會被自動初始化為0
- 區域性變數的分配是在棧上的,因此區域性物件的資料成員的值為隨機值
- 使用new分配的資料成員位於堆上,C++並沒有規定其初始值,因此其也為隨機數
注意:以上2、3 結果為理論結果,本人實測使用MinGW(windows)和Ubuntu下分別編譯,程式執行結果不同
Ubuntu下,base->val始終為0,而c.val為隨機數,二者正好相反
相關文章
- c++物件導向程式設計 常資料成員的使用C++物件程式設計
- C++中的成員物件C++物件
- 物件導向類成員物件
- 靜態資料成員和靜態成員函式函式
- cosnt成員資料的初始化
- 都是指標資料成員“惹的禍”指標
- 深度解讀《深度探索C++物件模型》之資料成員的存取效率分析(一)C++物件模型
- 深度解讀《深度探索C++物件模型》之資料成員的存取效率分析(二)C++物件模型
- 深度解讀《深度探索C++物件模型》之資料成員的存取效率分析(三)C++物件模型
- C++ 靜態資料成員C++
- c#物件導向- 靜態成員和非靜態成員的區別C#物件
- [C++之旅] 14 物件成員與物件陣列C++物件陣列
- 物件導向 成員和巢狀物件巢狀
- python之成員(物件導向)Python物件
- 如何成為資料庫管理員(DBA)?資料庫
- 基本資料型別和引用型別的初始值資料型別
- Java基礎02 方法與資料成員Java
- PHP通過反射實現物件的成員方法呼叫PHP反射物件
- 使用屬性而不是可訪問的資料成員
- C++派生類物件訪問基類的protected成員C++物件
- 類,物件,成員變數和區域性變數,匿名物件物件變數
- C++ 中的 const 物件與 const 成員函式C++物件函式
- #JAVA#物件導向(繼承中成員方法的關係)Java物件繼承
- 關於C++物件的成員變數的佈局問題C++物件變數
- 對於靜態成員來說是類的建構函式,對於例項成員是類的原型物件。函式原型物件
- 深入理解python物件導向-類特殊成員Python物件
- C++學習筆記(三):類與物件--靜態成員變數與常成員函式C++筆記物件變數函式
- C++中的static成員、static const成員和const成員的初始化C++
- 作為資料庫核心成員,如何讓淘寶不卡頓?資料庫
- C++物件導向程式設計(一):基於物件(無成員指標)C++物件程式設計指標
- 主資料治理的成功取決於“強有力的”團隊成員XM
- 類的域(field ,資料成員)是基本型別時的預設值型別
- TypeScript 中 class 的例項成員與靜態成員TypeScript
- C++類中的常成員和靜態成員C++
- 美創科技正式成為“資料安全強基計劃”成員單位
- #### 使用方法引用的使用場景--通過物件名引用成員方法物件
- Apache新成員:LinkedIn分散式資料整合框架GobblinApache分散式框架Go
- 第3周專案5-陣列作資料成員(1)陣列