您的位置:首页 > 编程语言 > C语言/C++

C++primer 第六章笔记 初稿

2017-03-18 21:29 295 查看

6.1 参数传递

用指针来传递多维数组时,仍然需要传递二维的具体参数;

可变形参

initializer_list

个人感觉就是一个容器?

代码如下

class Class1{
public:
Class1(int a, initializer_list<int>b){}

private:
int a;
int b;
};
class Class2{
public:
Class2(int a, int b){}
private:
int a;
int b;
};

int main(){
Class1 c1(1,{2});
Class2 c2(1,2);
return 0;
}


省略号

莫名把赋值与判断合并就会出错,就很气

想来第一个参数还是要的,没见过不加第一个参数的写法

#include <string>

#include <iostream>

#include <cstdarg>

using namespace std;

void fun(int n, ...){
va_list vl;
va_start(vl,n);
int arg;
do{
arg = va_arg(vl,int);
cout<<arg;
}while(arg !=0);
cout<<endl;
va_end(vl);
}
int main(){
fun(1,2,3,4,0);
fun(1,2,3,0);
return 0;
}


6.2 return语句

return返回初始化列表也是可以的(初始化列表欢乐多!);

using 相比于 typedef 的一大优越

typedef int arr[10];//arr表示长度为10的int数组
using arr = int[10];//等价
arr* f(int i);
arr* g(arr &a){
return &a;//值得关注
}

int (*p)[10] = f(1);


尾置返回与decltype

一大重要目的是降低阅读难度

尾置返回

int (*f(int i))[5]{}


此函数可被化简为如下简明形式

auto f(int i) -> int(*)[5]


declty
4000
pe

int a[5];

decltype(a) *f(int i){}


6.4 函数重载

顶层const不能作为重载的要素;

const_cast在重载中的应用

const string &shorterString(const string &s1, const string &s2)
{return s1.size() <= s2.size() ? s1 : s2;}

string &shorterString(string &s1, string &s2){
auto &r = shorterString(const_cast<const string&>(s1), const_cast<const string&>(s2));

return const_cast<string &>(r);
}


6.5 特殊用途语言

默认实参

初始值不一定是字面值,也可以是表达式;

constexpr函数

只能有一条return语句;

可以有形参,但必须也是常量表达式或字面值;

函数内部不允许执行任何操作,但可以有类型别名;

assert 与 NDEBUG

assert:用于判定,为假输出信息并停止程序运行,否则什么也不做;

NDEBUG:定义了即关闭调试状态

形如:#ifndef NDEBUG

几个预处理器定义的用于调试的变量

func存放函数名字

FILE存放文件名

TIME存放编译时间

DATE存放编译日期

6.6 函数指针

int f1(int a, int b){
return a;
}

int f2(int a, int b){
return b;
}
int main(){
int (*p[2])(int, int) ={f1, f2};
cout<<p[0](1,2)<<endl;
cout<<p[1](1,2)<<endl;

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: