原文:成员模板函数不能为虚函数,同时也不能有默认参数

不能为虚函数的原因: 编译器在编译一个类的时候,需要确定这个类的虚函数表的大小。一般来说,如果一个类有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