首页 >  知识中心 >  新闻详情

内联函数不能if 内联函数无法再main函数中使用

来源:朵拉利品网  |  2019-07-24 20:24:52

1, 内联函数无法再main函数中使用



内联函数没有办法通过类在外部调用,只能在类内部调用,因为内联函数的原理是在编译时直接替换调用地方的代码,例如
int main() {
test();
}
inline void test() {
printf("test");
}
实际编译的代码就是:
int main() {
printf("test");
}
如果test是一个类的函数则编译的时候没有办法进行这样的替换。

2, 内联函数是什么?



定义:
内联函数从源代码层看,有函数的结构,而在编译后,却不具备函数的性质。内联函数不是在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用处。编译时,类似宏替换,使用函数体替换调用处的函数名。一般在代码中用inline修饰,但是能否形成内联函数,需要看编译器对该函数定义的具体处理。
简介:
“一个函数声明[。。。]说明符声明一个内联与内联函数。内联说明符指示的实现,内联函数体替代了在调用点是首选通常的函数调用机制。一个实现不要求在调用执行此点内联替代,但是,即使这个内嵌替代省略,由7.1.2内联函数定义的其他规则,仍应得到尊重“。
注意事项:
内联函数具有一般函数的特性,它与一般函数所不同之处只在于函数调用的处理。一般函数进行调用时,要将程序执行权转到被调用函数中,然后再返回到调用它的函数中;而内联函数在调用时,是将调用表达式用内联函数体来替换。在使用内联函数时,应注意如下几点:
1. 在内联函数内不允许用循环语句和开关语句。 如果内联函数有这些语句,则编译将该函数视同普通函数那样产生函数调用代码,递归函数(自己调用自己的函数)是不能被用来做内联函数的。内联函数只适合于只有1~5行的小函数。对一个含有许多语句的大函数,函数调用和返回的开销相对来说微不足道,所以也没有必要用内联函数实现。
2. 内联函数的定义必须出现在内联函数第一次被调用之前。
3. 本栏目讲到的类结构中所有在类说明内部定义的函数是内联函数。

3, [转载]为什么内联函数,构造函数,静态成员函数不能为



内联函数是在编译时期展开,而虚函数的特性是运行时才动态联编,所以两者矛盾,不能定义内联函数为虚函数2 构造函数
构造函数用来创建一个新的对象,而虚函数的运行是建立在对象的基础上,在构造函数执行时,对象尚未形成,所以不能将构造函数定义为虚函数
3 静态成员函数
静态成员函数属于一个类而非某一对象,没有this指针,它无法进行对象的判别
这个可以从两个角度去理解:
1。virtual意味着在执行时期进行绑定,所以在编译时刻需确定信息的不能为virtual
构造函数需在编译时刻,因为需构造出个对象,才能执行动作,
静态成员函数不属于任何一个对象,编译时刻确定不存在执行的时候选择执行哪个的情形
内联函数,由于属于编译器的建议机制,所以可以virtual
2。virtual意味着派生类可以改写其动作
派生类的构造函数会先执行基类的构造函数而不是代基类构造函数,也就是说基类的构造函数可以看作派生类构造函数的组成,所以并不能改写这个函数
静态成员函数不属于任何一个对象,所以更不能改写其动作了
inline和virtual不会同时起作用。
带virtual的函数在不需要动态绑定调用的时候,就可以inline。
虚构造函数(virtual
constructor)C++不支持直接的虚构造函数。虚拟机制的设计目的是使程序员在不完全了解细节(比如只知该类实现了某个界面,而不知该类确切是什么东东)的情况下也能使用对象。但是,要建立一个对象,可不能只知道“这大体上是什么”就完事——你必须完全了解全部细节,清楚地知道你要建立的对象是究竟什么。所以,构造函数当然不能是虚的了。
但是,可通过虚函数
virtual clone()(对于拷贝构造函数)或虚函数 virtual
create()(对于默认构造函数),得到虚构造函数产生的效果。
注意:子类成员函数clone()的返回值类型故意与父类成员函数clone()的不同。这种特征被称为“协变的返回类型”(Covariant
Return Types),该特征最初并不是C++语言的一部分,VC6.0以下版本编译器不支持这样的写法。
虚析构函数(virtual
destructor)
当你可能通过基类指针删除派生类对象时,建议使用虚析构函数。虚函数绑定到对象的类的代码,而不是指针/引用的类。如果基类有虚析构函数,delete
basePtr(基类指针)时,*basePtr 的对象类型的析构函数被调用,而不是该指针的类型的析构函数。

相关概念


函数

函数的定义:给定一个数集A,假设其中的元素为x。现对A中的元素x施加对应法则f,记作f(x),得到另一数集B。假设B中的元素为y。则y与x之间的等量关系可以用y=f(x)表示。我们把这个关系式就叫函数关系式,简称函数。函数概念含有三个要素:定义域A、值域C和对应法则f。其中核心是对应法则f,它是函数关系的本质特征。 函数(function),最早由中国清朝数学家李善兰翻译,出于其著作《代数学》。之所以这么翻译,他给出的原因是“凡此变数中函彼变数者,则此为彼之函数”,也即函数指一个量随着另一个量的变化而变化,或者说一个量中包含另一个量。函数的定义通常分为传统定义和近代定义,函数的两个定义本质是相同的,只是叙述概念的出发点不同,传统定义是从运动变化的观点出发,而近代定义是从集合、映射的观点出发。

调用

调用是将程序的执行交给其他的代码段,通常是一个子例程,同时保存必要的信息,从而使被调用段执行完毕后返回到调用点继续执行。

 
相关新闻
内联函数的好处与不足 内联函数作用是? 07-24
内联函数与外联函数的区别 内联函数和外联函数有什么区别 07-24
内联函数定义 内联函数是什么? 07-24
内联函数的作用 inline内联函数具体有什么作用呢? 07-24
内联函数何时使用 c++什么时候需要使用内联函数? 07-24
内联函数是什么 内联函数是什么? 07-24
什么时候使用内联函数 c++什么时候需要使用内联函数? 07-24
内联函数的关键字为 内联函数与普通函数的区别是什么 07-24
区分内联函数 内联函数与普通函数的区别是什么 07-24
内联函数与重载函数 内联函数和 普通函数 宏定义的区别 07-24
相关产品
供应 LWG-3080 频率信号发生器 函数信号源 脉冲群发生器 05-21
铝合金联轴器 06-15
联创DF-GYW1002A干衣机宝宝专用家用双层方形超静音风 06-20
滚筒减速机连接部件 联轴器 减速机配套联轴器 清江减速机联轴器 06-30
供应智能手机wifi多点控制 WIFI控制器 07-05
联电系统 博世 西门子 怠速马达步进电机11125 F01R065906 D95184 07-25
智能硬件方案软件开发智能开关微信智能硬件远程控制协议蓝牙WIFI联网控制 07-27
供货 产地美国 HiFill品牌FR PA6/6 FR IM PA66原料 08-11
JIT吉腾KC 滚子链联轴器 KC保护器 08-14
FIKO墙壁电源86型银色拉丝一位开关单控双控多控单联双联多联暗装 11-28

大家都在看