size_t
为了增强程序的可移植性,便有了size_t,它是为了方便系统之间的移植而定义的,不同的系统上,定义size_t可能不一样。
typedef unsigned int size_t;
https://blog.csdn.net/bzhxuexi/article/details/19899803
cmake make g++
- 概念
文本程序到可执行文件生成无论在什么平台大致分为以下几个部分:
1.用编辑器编写源代码,如.c文件。
2.用编译器编译代码生成目标文件,如.o。
3.用链接器连接目标代码生成可执行文件,如.exe。
Linux平台下,.o文件一般是通过编译的但还未链接的目标文件,.out文件一般都是经过相应的链接产生的可执行文件(linux下)。当然这是一般情况下人们这么设置,而真正的,在linux中 .o通常保存的是可执行代码 ,至于可执行文件则没有规定扩展名,用的是文件属性位来决定的是否可执行。在chmod中设置。
我们知道编译和链接阶段是靠g++和gcc编辑器来完成,这两个编译阶段是相同的,但是链接阶段g++默认链接c++库,所以一般情况下用gcc编译c文件,而g++编译cpp文件。当然g++也可以编译c文件,而gcc编译cpp文件则需要在后面加上参数-lstdc++,作用就是链接c++库。
但是如果编译和链接的阶段如果源文件太多,一个一个编译时就会特别麻烦,于是人们想到,为什么不设计一种类似批处理的程序,来批处理编译源文件呢,于是就有了make工具,它是一个自动化编译工具,你可以使用一条命令实现完全编译。但是你需要编写一个规则文件,make依据它来批处理编译,这个文件就是makefile,所以编写makefile文件也是一个程序员所必备的技能。
对于一个大工程,编写makefile实在是件复杂的事,于是人们又想,为什么不设计一个工具,读入所有源文件之后,自动生成makefile呢,于是就出现了cmake工具,它能够输出各种各样的makefile或者project文件,从而帮助程序员减轻负担。但是随之而来也就是编写cmakelist文件,它是cmake所依据的规则。所以在编程的世界里没有捷径可走,还是要脚踏实地的。
原文件—cmakelist —cmake —makefile —make —生成可执行文件(make中则包含了多条链接以及gcc/g++编译语句)。
http://blog.sina.com.cn/s/blog_74a459380102uxlz.html
https://blog.csdn.net/FX677588/article/details/53159019
- 实操
int main(int argc, char *argv[])
int main(int argc, char **argv)
mac:
选定项目下如你的项目结构是:myproject/main.cpp
$ cd myproject
$ g++ -o myproject main.cpp
这时会生成可执行文件:myproject
然后执行
./myproject param1 param2 param3
得到:
argc 是所有(包括文件)的个数:4
argv 数组包括所有的值:argv[0] argv[1] argv[2] argv[3]
按书上说 argv[4] = 0 但是实际操作并没?
windows 编译成功生成.exe文件,也就是windows的可执行文件,这样,后续也跟上述一致。
重载函数 函数匹配
https://zhuanlan.zhihu.com/p/53874619
- 候选函数
重载函数集 - 可行函数
参数匹配,可被调用的函数集 - 最佳匹配函数
“最匹配” 无类型转换
最佳匹配原则:
1.精确匹配,包括实参类型和形参类型相同,实参从数组或函数转换成对应的指针类型,向实参添加顶层const或从实参删除顶层const
2.通过const转换实现的匹配
3.通过类型提升实现的匹配
4.通过算数类型转换实现的匹配
5.通过类类型转换实现的匹配