C++学习-1
泛型的概念:自动推理类型
C++/C 类型检测严格
1.赋值的时候是要求严格匹配,在初始化的时候是可以转换的.
2.在对于初始化的时候,()是单值,{}这个是数组,字符串等等
cin.get()
用法1: cin.get(字符变量名)可以用来接收字符
用法2:cin.get(字符数组名,接收字符数目)用来接收一行字符串,可以接收空格
用法3:cin.get(无参数)没有参数主要是用于舍弃输入流中的不需要的字符,或者舍弃回车,弥补cin.get(字符数组名,接收字符数目)的不足
重定向
可以把一个文件的输出,输出到指定文件,>代表刷新后重写,>>代表直接追加
<,<<都是输入
模板:调用才编译
特例永远优先于模板 通用泛型
需要强行调用模板就要<>指定类型
嵌套肯定要说明类型,多层嵌套,需要最内层说明
一般推断不了的也要用类型说明
总结:要么能根据类型判断,要么就直接指明
命名空间可以无限嵌套
不能有private成员
内层覆盖外层
要是有外层时
::直接访问全局变量
使用命名空间要先定义才能Using...
inline在命名空间的作用直接内联到命名控件成为默认的函数
Inline命名空间直接可以在本层访问
匿名命名空间等同于全局变量
标准的命名空间能别名,自定义的可以
多个命名空间要防止冲突
c++没有声明与定义的区别
类也可以放在命名空间里面
static作用于当前文件,
extern表名该变量已经声明,编译器从外部查找(声明的感觉)
Using命名虽然是全局但是还是没有extern强势
匿名结构等同于全局变量,可以跨文件,::屏蔽匿名
匿名空间更加凸显全局性(匿名命名空间)
typeid().name()是什么类型
<cstdarg>可变参数
函数参数包可变参数总结:
1.必然是递归.
2.一定要有一个配套的递归函数(参数一定是除了typename T,typename...Args之外的那个
3.一定要设置递归结束 return0;
默认参数是CPP的特性.默认参数从右边开始,函数参数进栈从右开始
c中auto自动变量,栈上
括号仅用于初始化
- CPP不存在声明和定义之说(C语言存在):解决方式就是命名空间
- 匿名命名空间相当于全局
- Using命名空间之后,很容易和全局发生冲突,只要使用using就可以省略命名空间此时就容易发生冲突
- 局部变量直接覆盖命名空间
- 5. ::最全局
- 6. Typeid().name类型是什么
Typeid获取数据类型 是关键字而已
- 7. 默认参数都从右边开始,参数进栈的顺序都是从右往左
- 8. For(auto i:a)取得是副本
要想取原本,旧的auto &
可以在模板中使用
- 9. 括号仅用于初始化
10. CPP数组new时必须指定大小
11. Typedef只能搞C有的