关于内联函数
来源:互联网 发布:windows recv返回值 编辑:程序博客网 时间:2024/05/22 13:28
看c++primer时看到一句话“把内联函数放到头文件中”。当时看了后觉的挺奇怪,如果把内联函数放到头文件中 岂不是在链接时要报错?因为会产生重复定义的错误。
但是测试了下面的代码:
test.h
#ifndef ___TEST_H_
#define ___TEST_H_
#include<iostream>
inline void print()
{
std::cout<<"Hello"<<std::endl;
}
#endif
test1.cpp
#include"test.h"
test2.cpp
#include"test.h"
int main()
{
return 0;
}
没有报错,也就是说test1.o和test2.o中没有相同的符号print。所以链接时才没有产生错误。
后来又进一步考虑,除非inline函数在定义时是局部的,也就是带有static功能才能保证不会引起重复定义的错误。
但是接着又进行了下面的测试:
test.h
#ifndef ___TEST_H_
#define ___TEST_H_
#include<iostream>
inline void print();
#endiftest1.cpp
#include"test.h"
inline void print()
{
std::cout<<"Hello"<<std::endl;
}
test2.cpp
#include"test.h"
int main()
{
print();
return 0;
}
这个时候报错了,错误原因是print 符号无法解析。
也就是说编译完成后 在test1.o中没有print 的函数体,才会导致链接时 test2.o中的print无法定位。
所以经过上面的测试 得到一个结论,也就是 内联函数在编译时就进行了符号替换,也就是在调用内联函数的地方用函数体进行了替代。而函数在编译后就没有了,这样也就避免了过程调用 可以加快程序的运行。所以如果要在多个源文件中使用同一内联函数最好的办法就是在头文件中定义该内联函数,否则就要在不同的源文件中都要定义该内联函数了。
- 关于内联函数读书笔记
- 关于内联函数inline
- 关于内联函数
- 关于内联函数
- 关于内联函数
- 关于内联函数
- 关于C++内联函数
- 关于内联函数inline
- 关于内联函数
- 关于C++内联函数
- 关于C++内联函数
- 关于内联函数的整理
- 关于内联函数的编译
- 关于C++中的内联函数
- 关于GetSafeHwnd()与内联函数
- 关于C++中的“内联函数”
- 关于c++的内联函数
- 关于内联函数的解释
- 在IT界取得成功应该知道的10件事
- 惠普收入高利润低 webOS携手Palm死去
- JDBC API
- 设计模式--工厂模式
- C#:WQL查询LIKE子句中反斜杠字符引发的血案及解决之道
- 关于内联函数
- 高级查询和表连接
- SQL语句中的内连接,左链接,右链接和全链接
- Myeclipse 8.5 配置SVN
- 每天做一次学习笔记
- Java 性能优化技巧集锦
- android 播放器开发
- 测试如何更有效说服研发去修改bug?
- XML 加密和 SOAP