原文:成員模板函數不能為虛函數,同時也不能有默認參數

不能為虛函數的原因: 編譯器在編譯一個類的時候,需要確定這個類的虛函數表的大小。一般來說,如果一個類有N個虛函數,它的虛函數表的大小就是N,如果按字節算的話那么就是 N。如果允許一個成員模板函數為虛函數的話,因為我們可以為該成員模板函數實例化出很多不同的版本,也就是可以實例化出很多不同版本的虛函數,那么編譯器為了確定類的虛函數表的大小,就必須要知道我們一共為該成員模板函數實例化了多少個不同版本的 ...

2015-12-31 10:28 2 1961 推薦指數:

查看詳情

C++ 函數默認參數問題

C++缺省參數問題 一般函數函數聲明時,默認參數可以放在函數聲明或者定義中,但只能放在二者之一,建議放在聲明中 沒有函數(原型)時,默認參數函數定義時指定 一旦某個參數開始指定默認值,它右邊的所有參數都必須指定默認值:函數聲明時,必須按照從右向左的順序,依次給與 ...

Tue Apr 20 07:48:00 CST 2021 1 194
構造函數為什么不能為函數 & 基類的析構函數為什么要為函數

一、構造函數為什么不能為函數 1. 從存儲空間角度,函數相應一個指向vtable函數表的指針,這大家都知道,但是這個指向vtable的指針事實上是存儲在對象的內存空間的。問題出來了,假設構造函數的,就須要通過 vtable來調用,但是對象還沒有 ...

Wed Oct 08 23:41:00 CST 2014 0 3998
為什么構造函數能為函數,而析構函數可以為函數

1. 構造函數為什么不能為函數? a. 存儲空間角度: 函數的調用需要函數表指針,而該指針存放在對象的內容空間中,需要調用構造函數才可以創建他的值,否則即使開辟了空間,則虛表指針為隨機值,不會找到構造函數;若構造函數聲明為函數,那么由於對象還未創建,還沒有內存空間 ...

Mon Oct 20 00:10:00 CST 2014 0 4104
C++的構造函數為何不能為函數

1. 存儲空間角度:函數對應一個vtable,vtable存儲於對象的內存空間 若構造函數的,則需要通過 vtable來調用,若對象還未實例化,即內存空間還沒有,無法找到vtable 2. 使用角度:函數主要用於在信息不全的情況下,能使重載的函數得到對應的調用。 構造函數 ...

Mon Sep 16 07:32:00 CST 2019 0 1305
函數模板的用途區別

模板是范型編程的基礎,所謂范型編程就是用獨立與任何特定類型的方式編寫代碼所以簡單地說,類是對象的抽象,而模板又是類的抽象,也就用模板能定義出具體類再理解深刻點在c++里,常說的多態一般分為兩種:一種是運行時的多態,也就是函數體現的多態另一種是編譯時的多態,也就是范型編程的多態,體現在參數的多態 ...

Wed Mar 04 10:15:00 CST 2020 0 731
C++11 函數模板默認模板參數

聲明時,標准允許其有默認模板參數。而函數模板卻不支持。 默認模板參數的作用如同函數默認形參。不過在 ...

Fri Jan 24 05:35:00 CST 2020 0 3940
c++ 類模板函數模板的問題,模板函數不能是函數函數不能是內聯

內聯函數能為函數,原因在於虛表機制需要一個真正的函數地址,而內聯函數展開以后,就不是一個函數, 而是一段簡單的代碼,可能有些內聯函數會無法內聯展開,而編譯成為函數 函數不能模板化 編譯器在編譯一個類的時候,需要確定這個類的函數表的大小。一般來說,如果一個類有N ...

Wed Apr 22 19:39:00 CST 2020 0 1177
 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM