」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 為什麼 C++ 建構函式有兩個符號?

為什麼 C++ 建構函式有兩個符號?

發佈於2024-11-18
瀏覽:788

Why Are There Two Symbols for C   Constructors?

C 建構子的雙重符號

Itanium C ABI 指定建構函式的重整名稱包含有關其型別和參數的資訊。因此,在庫中觀察到的兩個建構函式條目源自於它們不同的建構子類型:

  • 完整物件建構子(C1):此建構子完全初始化對象,包括任何虛擬基類.
  • 基對象構造函數(C2): 此構造函數初始化對象本身以及資料成員和非虛擬基類。

雙符號和多重定義錯誤

儘管有雙條目,但由於使用 C1 和 C2 後綴,不會出現符號定義衝突。 ABI 確保重整名稱是唯一的,為以不同方式處理這兩種建構函式類型提供編譯器支援。

其他詳細資料

  • 在沒有虛擬基的情況下類中,完整的對象構造函數和基礎對象構造函數是相同的,並且在在充分優化的情況下,符號可以別名為相同的代碼。
  • 對雙構造函數符號的需求主要是由對多態性的支持所驅動的,其中不同的對象可以繼承不同的基類,需要專門的初始化。
  • 此行為曾經顯示在 c filt 輸出中,但不再包含在內。
最新教學 更多>
  • 想要速度嗎?按價值傳遞:複製消除總是效能贏家嗎?
    想要速度嗎?按價值傳遞:複製消除總是效能贏家嗎?
    想要速度?按值傳遞:效能注意事項「想要速度?按值傳遞」的原則表明,按值傳遞參數有時可以由於複製省略而提高效能。為了說明這一點,請考慮以下使用類別 X 和 Y 的程式碼:struct X { std::string mem_name; X(std::string name) : mem_nam...
    程式設計 發佈於2024-11-18
  • 在 Go 中使用 WebSocket 進行即時通信
    在 Go 中使用 WebSocket 進行即時通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    程式設計 發佈於2024-11-18
  • 為什麼我的MySQL預存程序無法成功執行事務?
    為什麼我的MySQL預存程序無法成功執行事務?
    解決MySQL 儲存過程中的事務問題當嘗試在MySQL 儲存過程中實現事務時,開發人員可能會遇到意外錯誤。本文將探討可能阻止事務性預存程序成功執行的語法和邏輯錯誤。 案例:一個不成功的事務開發人員在以下情況下遇到問題:嘗試在儲存過程中實現事務。儘管遵循了 MySQL 文檔,但該過程未能成功執行並提示...
    程式設計 發佈於2024-11-18
  • 如何控制選擇框選項的寬度?
    如何控制選擇框選項的寬度?
    設定選擇框選項的寬度在給定的HTML 程式碼中,選擇框選項的寬度超過了選擇框的寬度盒子本身。要解決此問題並確保選項寬度與選擇框寬度對齊,我們套用 CSS 樣式。 CSS 解決方案:select, option { width: 250px; } option { overflow: ...
    程式設計 發佈於2024-11-18
  • 如何在迭代時安全地從 `std::vector` 中刪除元素?
    如何在迭代時安全地從 `std::vector` 中刪除元素?
    從 std::vector 迭代和擦除迭代 std::vector 的建議方法是使用迭代器。然而,在迭代時擦除元素可能會使迭代器失效。 要解決這個問題,在擦除元素後修改迭代器賦值至關重要,如下所示:for (iterator it = begin; it != end(container) /* !...
    程式設計 發佈於2024-11-18
  • 如何使 Overlay Div 對滑鼠事件「不可見」?
    如何使 Overlay Div 對滑鼠事件「不可見」?
    確保元素對滑鼠事件的回應在某些情況下,有必要在文字上覆蓋透明div 以掩蓋其可見性。然而,這引發了覆蓋層阻止底層文字可點擊的問題。有沒有辦法使覆蓋層對滑鼠事件“不可見”,從而允許與下面的文字互動? 例如,如果我們有以下 HTML 結構:<div id="container"...
    程式設計 發佈於2024-11-18
  • 什麼是 Python Egg 以及它們如何用於包裝?
    什麼是 Python Egg 以及它們如何用於包裝?
    Python Eggs 精要指南在 Python 套件管理領域,術語「egg」發揮了重要作用。它代表了一種分發和打包機制,允許開發人員捆綁他們的程式碼、資源和元資料以方便分發。 定義 Python EggsPython Egg 本質上是一個封裝特定軟體專案版本的發布的邏輯結構。它包括程式碼庫、資源和...
    程式設計 發佈於2024-11-18
  • 如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    在 PHP 中組合關聯數組在 PHP 中,將兩個關聯數組組合成一個數組是常見任務。考慮以下請求:問題描述:提供的代碼定義了兩個關聯數組,$array1 和 $array2。目標是建立一個新陣列 $array3,它合併兩個陣列中的所有鍵值對。 此外,提供的陣列具有唯一的 ID,而名稱可能重疊。要求是建...
    程式設計 發佈於2024-11-18
  • 非管理員使用者能否在不影響系統安全的情況下啟動 Windows 服務?
    非管理員使用者能否在不影響系統安全的情況下啟動 Windows 服務?
    從沒有管理員權限的應用程式啟動 Windows 服務許多方案涉及從單獨的應用程式啟動或停止 Windows 服務。然而,出於安全考慮,這對於非管理員用戶來說似乎受到限制。如何克服這個限制,在不影響系統穩定性的情況下,讓使用者對服務管理進行精細化控制? 解決方案:修改服務權限這個問題的關鍵在於修改服務...
    程式設計 發佈於2024-11-18
  • 如何在 Python 2 原始碼中使用 UTF-8 編碼?
    如何在 Python 2 原始碼中使用 UTF-8 編碼?
    在Python 原始碼中使用UTF-8 編碼在某些情況下,使用時可能會遇到與非ASCII 字元相關的錯誤Python 原始碼中的Unicode 字串。這是因為 Python 2 原始檔的預設編碼不是 UTF-8。 聲明 UTF-8 字串在 Python 3 中,UTF-8 是預設編碼來源編碼,因此可...
    程式設計 發佈於2024-11-18
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-11-18
  • 如何從 PHP 字串中的字元中刪除重音符號而不遇到意外的替換?
    如何從 PHP 字串中的字元中刪除重音符號而不遇到意外的替換?
    如何從 PHP 字串中的字元中刪除重音符號? 在 glibc 實作中使用 iconv 可能會導致意外的字元替換,例如問號當嘗試從 PHP 字串中的字元中刪除重音符號時。 問題源自於 iconv 和 glibc 實作之間的不相容,這不如首選的 libiconv 實作那麼可靠。若要解決此問題,請確保 P...
    程式設計 發佈於2024-11-18
  • 如何在沒有外部依賴的情況下使用Python在Linux中擷取螢幕截圖?
    如何在沒有外部依賴的情況下使用Python在Linux中擷取螢幕截圖?
    使用 Python 在 Linux 中捕獲螢幕截圖在各種 Linux 環境中,需要以不顯眼的方式捕獲螢幕截圖以用於文件或分析目的。利用 Python 強大的腳本功能,我們探索了一種在不透露任何可見幹擾的情況下截取螢幕截圖的腳本方法。 下面的 Python 腳本利用 GTK 綁定來檢索螢幕解析度和像素...
    程式設計 發佈於2024-11-18
  • 如何從不同子網域上的 iFrame 取得父頁面的 URL?
    如何從不同子網域上的 iFrame 取得父頁面的 URL?
    從iFrame 訪問父級URL:限制和解決方法從iFrame 訪問父級框架的URL 可能是一項挑戰,特別是當iFrame 位於不同的子域上。這是由於跨站點腳本 (XSS) 預防措施所施加的安全限制。 從與父框架相同的域和子域存取 iFrame 時,應使用諸如 Parent 之類的表達式直接存取父級的...
    程式設計 發佈於2024-11-18
  • 大批
    大批
    方法是可以在物件上呼叫的 fns 數組是對象,因此它們在 JS 中也有方法。 slice(begin):將陣列的一部分提取到新數組中,而不改變原始數組。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index ...
    程式設計 發佈於2024-11-18

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3