int p new int ,得到 p 0,這說明int基本型別也存在建構函式嗎?

時間 2021-05-30 19:28:25

1樓:C十十20年

簡單型別和複雜的類在初始化形式上一致,但並不表示int型別有建構函式,作為類的物件有建構函式時通常有析構函式(編譯會預設提供),可是對int型別是不提供析構的。只能說new( )預設用0初始化,可寫成new(0)或new{}或new, 參見《C++程式設計精要教程》介紹的C++2017標準。

2樓:小白龍

我想是不能的。new只對class定義的型別呼叫建構函式,對int型別等內建的基礎資料型別直接使用0填充。new int()只是寫法上看起來像有乙個建構函式,但實際上不存在int::

int()這樣的函式。

3樓:李華

我不是太了解int是否有建構函式的問題。只是講講我的使用經驗。

根據我寫c++的經驗,clang好像已經預設不允許 new int()了,可能開某個flag會允許,但我沒試過。這感覺就挺符合int「沒有建構函式「的觀念。

我的理解是簡單來說(不嚴謹),可以用int作為class的variable或者函式作用域下的variable 完全替代new int()這種寫法的。

而且int和pointer佔的空間差不多,而custom_class 和custom_class *的體積可能差別非常大。

4樓:Lancern

先說答案:沒有。因為 new T() 並不等同於呼叫構造器。

本例中使用的是 new 表示式語法(之一):

new T initializer

其中 initializer 部分是乙個空的括號對。

new 表示式會先呼叫 operator new 分配一塊足以放下乙個 T 型別的值的記憶體,然後再根據 initializer 對 T 型別的值進行初始化。C++ 的初始化是乙個專門的複雜主題,在這裡用的是其中一種叫做 value initialization 的初始化方式。

C++ 規定 value initialization 的行為為:

如果 T 是乙個 class type,且具有乙個使用者自定義的 default constructor,那麼值將被預設初始化(default-initialized);

如果 T 是乙個 class type,且 default constructor 是自動生成的或被標記為 default,那麼值將被:

零初始化(zero-initialized),如果 defaut constructor 是 trivial 的;

預設初始化(default-initialized),如果 default constructor 不是 trivial 的。

如果 T 是乙個陣列,那麼陣列的每乙個成員均會被 value-initialized;

否則,值將被零初始化(zero-initialized)。

在這裡,由於 int 既不是乙個 class type,也不是乙個陣列,因此程式採取第三種策略,即採用零初始化(zero-initialized)。顧名思義,zero-initialize 就是使用 0 來初始化這個值。

總結一下:這裡是初始化的問題,不是構造器的問題。C++ 的初始化是專門的主題,不同的場景、不同的語法和不同的型別會導致完全不同的初始化方式和初始化結果,呼叫構造器只是初始化的其中一種方式,且只適用於 class type 和 union type。

只有 class type 和 union type 可以有構造器。

如果P社得到了暴雪的授權,以魔獸為背景做一款遊戲會怎麼樣?

已登出 不可相容。魔獸劇情幼稚傻白甜到了白左的地步,屠個城就能讓玩家群體就劇情撕個天翻地覆。這種事擱p社遊戲,p大個事還用給我打報告?乙個童話故事,乙個歷史模擬,差別太大了,沒法搞。 bgm17truth 我們現在選擇魔獸世界60年代這個劇本開始,人物呢我們就選擇薩爾。這個劇本開始可以看到薩爾跟幾乎...

文明玩家應該和p社玩家得到一樣的待遇嗎?

小粽子 不應當,眾所周知,文明玩家都是一群熱愛和平,致力於經濟發展的種田玩家。不僅如此,他們還富有國際主義精神,幫助鄰國種田。反觀文明ai,連最愛好和平的印度都有可能對你進行慘無人道的核打擊 李士 玩至丑時,忽陰雲漠漠,聚雨將至。從人遙指天外龍掛,全戰玩家 以下簡稱全戰 與文明玩家 以下簡稱文明 憑...

怎麼投資P2P

星星 p2p理財平台受到廣大投資者的追棒,較高的收益下,我們常常會思考,收益那麼高,風險會不會很大,對於投資者來說,選擇安全合規的平台是非常重要的,我們可以從四個方面觀察這個平台安不安全。一 服務是否到位。留意觀察,客服服務 使用者服務和增值服務等的平台服務是否做好,因為服務不僅能代表這個P2P平台...