1、int main(int argc, char *argv[])

当刚看到这句话的时候,是没有什么感觉的,因为从刚开始接触c++以来就经常见到这句话,只当它是所有c++程序的开头罢了,当我看到接下来的代码中在利用()里面的参数时,我是懵圈的,我才发现我竟然不了解这句话的意思。

main函数可以带参数,这个参数可以认为是 main函数的形式参数。C语言规定main函数的参数只能有两个, 习惯上这两个参数写为argc和argv。

C语言还规定argc(第一个形参)必须是整型变量,argv( 第二个形参)必须是指向字符串的指针数组。

由于main函数不能被其它函数调用, 因此不可能在程序内部取得实际值。main函数的参数值是从操作系统命令行上获得的。当我们要运行一个可执行文件时,在DOS提示符下键入文件名,再输入实际参数即可把这些实参传送到main的形参中去。

DOS提示符下命令行的一般形式为: C:\>可执行文件名 参数 参数……; 但是应该特别注意的是,main 的两个形参和命令行中的参数在
位置上不是一一对应的。因为,main的形参只有二个,而命令行中的参数个数原则上未加限制。argc参数表示了命令行中参数的个数(注意:文件名本身也算一个参数),argc的值是在输入命令行时由系统按实际参数的个数自动赋予的。例如有命令行为: C:\>e24 BASIC dbase FORTRAN由于文件名e24本身也算一个参数,所以共有4个参数,因此argc取得的值为4。argv参数是字符串指针数组,其各元素值为命令行中各字符串(参数均按字符串处理)的首地址。 指针数组的长度即为参数个数。数组元素初值由系统自动赋予,其中第0个参数是程序的全名。其表示如下所示:
main(int argc,char *argv){
while(argc-->1)
printf("%s\n",*++argv);
}
本例是显示命令行中输入的参数如果上例的可执行文件名为e24.exe,存放在A驱动器的盘内。
因此输入的命令行为: C:\>e24 BASIC dBASE FORTRAN 
则运行结果为:
BASIC
dBASE
FORTRAN

一般情况下,在windows下不太常用,只是在Linux程序中用的较多。

2、getenv()\putenv()

getenv(const char* varName):获取环境变量名称varName的环境变量的值

putenv(const char* varString):将当前的环境变量varString添加的环境中,设置的环境仅对程序本身有效,不会反映到外部环境

3、std::signal(SIGINT, SignalHandler);

signal函数原型:

void (*signal (int sig, void (*func)(int)))(int);

第一个参数为 整数,标识信号号码;第二个参数标识 一个指向信号处理函数的指针,即第二格参数其实是一个函数指针;

参考文档:http://wiki.jikexueyuan.com/project/cplusplus/signal-handling.html

http://blog.csdn.net/ta893115871/article/details/7475095

不过,signal函数大部分情况下是用在unix下,windows下的编程很少用到。

4、std::set_new_handler(NewHandler);

std有一个set_new_handler函数,它接受和返回一个new_handler类型,用于设置当前当使用new操作符无法分配足够内存时而抛出bad_alloc异常的处理函数。new_handler其实是一个void (void)函数,你可以在头文件<new>中看到它的typedef:typedef void(*new_handler)();

所以std::set_new_handler其实是接受一个不接受参数也无返回值的函数的函数指针。而这个函数就被用来处理bad_alloc异常。

这句话的意思就可以理解为:当程序中的new操作或着new[]操作失败时,将调用NewHandler指向的函数。

5、select()

select()函数:确定一个或多个套接口(Socket)的状态,对于每一个套接口,调用者可以查询它的可读性、可写性及错误状态信息。用fd_set结构来标识一组等待检查的套接口,在调用返回时,这格结构存有满足一定条件的套接口组的子集,并且select()返回满足条件的套接口的数目。有一组宏可用于对fd_set的操作,这些宏与unix软件中的兼容,但内部的表达是完全不同的。

select()是属于一个比较大的范畴了,而且又分windows和unix的区别,具体资料不再此骜述,具体资料可参考一下资料:

http://blog.csdn.net/pugu12/article/details/46863715

http://blog.csdn.net/leo115/article/details/8097143

http://www.cnblogs.com/renyuan/p/5100184.html

http://blog.sina.com.cn/s/blog_4900f3fb0100k20a.html

6、std::auto_ptr<>

auto_ptr是一个模板类,定义如下:

template <typename Type>
class
 auto_ptr {...};

它存储的是一个指向Type的指针。

顾名思义,auto_ptr是一种智能指针,它包含一个动态分配内存的指针,并在它生命周期结束的时候,销毁包含的指针所指向的内存。

auto_ptr构造函数:std::auto_ptr<Billard> billard(createBillard(args.demo_given, args.demo_arg, federate));

这句话的意思就是,用auto_ptr定义了一个Billard类的一个实例billard,同时为Billard的构造函数传递了参数 createBillard(args.demo_given, args.demo_arg, federate)的返回值

参考文章:http://blog.csdn.net/monkey_d_meng/article/details/5901392

http://blog.163.com/hbu_lijian/blog/static/126129153201242124741769/

7、构造函数初始化

构造函数初始化成员变量有两种方式,一是传统的方式,即;

CSomeClass::CSomeClass() 
{x=0; 
y=1; }

还有一种是采用成员初始化列表的形式:

CSomeClass::CSomeClass() : x(0), y(1) 

}

采用成员初始化列表的形式有两格原因:

第一:当初始化另一个类的成员。如:

class CMyClass { 
CMember m_member; 
public: 
CMyClass(); 
}; 
//必须使用成员初始化列表 
CMyClass::CMyClass() : m_member(2) 

...
}

没有其它办法将参数传递给m_member,如果成员是一个常量对象或者引用也是一样。根据C++的规则,常量对象和引用不能被赋值,它们只能被初始化。 
第二:基于效率的考虑,不再骜述。

需要说明的是,成员初始化列表是按照在类中成员声明的顺序进行初始化的,而不是按照在成员初始化列表里面定义的顺序。

参考文章:http://blog.csdn.net/ianchoi/article/details/6917899

8、std::vector<std::string>

vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。

为了可以使用vector,必须在你的头文件中包含下面的代码:

#include <vector>

vector属于std命名域的,因此需要通过命名限定,如下完成你的代码:

using std::vector;

或者连在一起,使用全名:

std::vector;

建议使用全局的命名域方式:

using namespace std;

在后面的操作中全局的命名域方式会造成一些问题。vector容器提供了很多接口,在下面的表中列出vector的成员函数和操作。

参考文章:http://blog.csdn.net/zhoujiaxq/article/details/9787341

https://ceeji.net/blog/cpp-std-vector/

http://blog.csdn.net/infoworld/article/details/15736305

CE-RTI开源软件代码学习笔记(一)相关推荐

  1. 2018中国人工智能开源软件发展白皮书-笔记

    "2018中国人工智能开源软件发展白皮书"是新手了解人工智能技术原理和技术现状的好文档,读完之后有再读几遍的冲动,学到了很多东西,做了笔记分享给大家共同学习,有不对的地方多多指出. ...

  2. 软件调试学习笔记(七)—— 单步步入单步步过

    软件调试学习笔记(七)-- 单步步入&单步步过 单步步入 设置单步异常 处理单步异常 实验1:单步异常的设置与处理 单步步过 实现思路 实验2:实现单步步过 单步步入 描述: 单步步入的实现依 ...

  3. 软件调试学习笔记(六)—— 硬件断点

    软件调试学习笔记(六)-- 硬件断点 硬件断点 设置硬件断点 触发硬件断点 处理硬件断点 实验:硬件断点的设置与处理 硬件断点 描述: 与软件断点与内存断点不同,硬件断点不依赖被调试程序,而是依赖于C ...

  4. 软件调试学习笔记(五)—— 软件断点内存断点

    软件调试学习笔记(五)-- 软件断点&内存断点 调试的本质 软件断点 软件断点的执行流程 分析INT 3执行流程 实验:处理软件断点 内存断点 内存断点的执行流程 实验:处理内存断点 调试的本 ...

  5. 软件调试学习笔记(四)—— 异常的处理流程

    软件调试学习笔记(四)-- 异常的处理流程 要点回顾 异常的处理流程 实验1:理解调试器与异常的关系 未处理异常:最后一道防线 实验2:理解UnhandledExceptionFilter执行流程 实 ...

  6. 软件调试学习笔记(三)—— 调试事件的处理

    软件调试学习笔记(三)-- 调试事件的处理 要点回顾 调试事件的处理 实验一:实现简单调试器(创建进程) 实验二:分析异常来源 实验三:实现简单调试器(附加进程) 实验四:分析NtDebugActiv ...

  7. 【软考中级】软件设计师学习笔记

    软件设计师学习笔记 计算机系统知识 程序语言设计 数据结构 操作系统 软件工程基础知识 结构化开发方法 创建型设计模式 行为型设计模式 结构型设计模式: 算法设计与分析 数据库技术基础 网络与信息安全 ...

  8. 软件设计模式学习笔记(七)

    软件设计模式学习笔记(七) 结构型模式 1. 组合模式 1.1 概述 ​ 对于这个图片肯定会非常熟悉,上图我们可以看做是一个文件系统,对于这样的结构我们称之为树形结构.在树形结构中可以通过调用某个方法 ...

  9. 软件设计模式学习笔记(三)

    软件设计模式学习笔记(三) 1. 工厂设计模式 1.1 概述 需求:设计一个咖啡店点餐系统. 设计一个咖啡类(Coffee),并定义其两个子类(美式咖啡[AmericanCoffee]和拿铁咖啡[La ...

  10. 三代组装软件canu学习笔记

    三代组装软件canu学习笔记 (2017-08-07 14:17:43) 转载▼   分类: 三代 1:这个组装软件起源于PBcR包含在Celera Assembler中(http://wgs-ass ...

最新文章

  1. java金钱千分位处理_java对金额的处理,保留两位小数、千分位符
  2. docker 安装zookeeper集群
  3. fopen需要改写成fopen_s的时候
  4. 博士申请 | 香港科技大学谢知遥教授实验组招收机器学习全奖博士生
  5. servlce与filter的url-pattern介绍
  6. 快速排序 (随机选择pivot)
  7. 全球Top 1000计算机科学家h指数公布,中国顶尖计算机科学家人数进入前三
  8. java设计模式面试,深入分析
  9. 典型的php系统由什么组成,完整的计算机系统由什么组成
  10. 怎么用spss做冗余分析_【攻略】手把手教你怎么用SPSS做统计分析
  11. GB/T 18487电动汽车充电领域国家标准解析 篇一(充电术语和定义)
  12. Java 网络IO编程
  13. k8s集群管理(一)
  14. 我参加第七届NVIDIA Sky Hackathon——训练ASR模型
  15. LeetCode刷题第七天
  16. android表情符号不显示,微信分享页面Andriod手机emoji表情符无法显示问题?
  17. 【财富空间】计算机起源的数学思想
  18. 最后冲刺:第三届全国人工智能大赛决赛战报
  19. R语言rhdf5读写hdf5文件(.h5)展示文件组织结构和数据索引
  20. 遇到女神应该使用什么样的暗恋思维

热门文章

  1. linux安装intel无线网卡驱动,CentOS 命令行安装intel 2200bg无线网卡驱动
  2. 将图片公式快速转为word可编辑的方法(windows和mac都支持)
  3. notepad下载(官网进不去)
  4. android dialog遮挡键盘,彻底解决软键盘遮挡DialogFragment
  5. 如何破解私域留存?四大核心环节拆解锁客关键能力
  6. IDEA 2019 修改中文字体
  7. 全屏滚动插件之 fullpage.js
  8. 赠书!Python 安全攻防,终于来了!
  9. ultravnc中文版,5步教你如何进行ultravnc中文版配置
  10. 浅述不同版本ios系统有什么特点 ios 1 -ios 12