综合工具 init_design 报错分类指南:哪些必须修,哪些可放行
2026/10/9 11:13:31
命名空间 using namespace 可以嵌套 允许重名 最后编译器会整合到一起
域作用限定符 ::
namespace manba { //可以定义变量 函数 以及自定义类型 int a; int strlen(int* a, int size); //可以嵌套 namespace out { int a; int string(int a) { return a; } } } int manba::strlen(int* a, int size) { return size; }缺省参数
//定义只关心是否传参 但VS好像给他优化掉了 void Init(int* a, int capa = 5); void Init(int* a, int capa) { a = (int*)malloc(sizeof(int) * capa); printf("%d", capa); } void test1() { printf("test1\n"); int* a = NULL; Init(a); }函数重载
//C++允许函数重名 double string(int a, double b) { return a + b; } double string(double a) { return a; } //原理:列举gcc C++对函数的命名规则 // _Z 函数名长度 函数名 参数类型首字母且区分顺序 // 这个命名跟返回值没太大关系引用
//给类型起别名 int a; //起别名必须直接初始化 int& b = a; //做参数 void Swap(int& a, int& b) { int tmp = a; a = b; b = tmp; printf("%d ", a); printf("%d\n", b); } void test2() { int x = 1; int y = 2; int& a = x; int& b = y; Swap(x, y); Swap(a, b); }//做返回值 int all = 0; int*& fun1() { int* a = (int*)calloc(sizeof(int), 3); int*& b = a; //这里返回b和a都可以 return a; } void test3() { //用int*类型接收可以正常打印 //但是int*&接收出问题 int* d = fun1(); printf("%d ", d[0]); printf("%d ", d[1]); printf("%d\n", d[2]); int*& v = fun1(); printf("%d ", v[0]); printf("%d ", v[1]); printf("%d\n", v[2]); }struct
//struct的typedef typedef struct manbaout { int a; //...... }man, *bingbingbing; //C++对结构体升级成了类 故bingbingbing不能与manbaout同名 //这里的bingbingbing代表 stuct manbaout* 类型的变量名做返回值进行修改
//修改返回值 typedef struct SeqList { int a; //... }Seq,*SeqL; int& func2(SeqL& ps) { return ps->a; } void test4() { Seq ps = { 0 }; SeqL pa = &ps; func2(pa)++; printf("%d", pa->a); }常引用
int func3() { static int n = 5; return n; } void test5() { //权限不可放大 但是可以缩小 const int s1 = 10; const int& s2 = s1; //常量也可以取别名 const int& s3 = 10; printf("%d",s3); //强转 函数返回 创建的临时变量表现为常性 const int& a1 = func3(); const int& a2 = (int)3.14; }auto关键字、范围for
void test6() { auto a = 1 + 1.2; printf("%lf\n", a); //范围for int arr[] = { 0, 1, 2, 3, 4, 5 }; for (auto manbaout : arr) { cout << manbaout << " "; } //对数组的改变 for (auto& manbaout : arr) { manbaout++; } for (auto manbaout : arr) { cout << manbaout << " "; } }关键字inline内联
//为了防内存膨胀,决定是否内联的是编译器 //内联是直接替换 不会参与符号汇总 inline const char* whatcanisay() { const char* arr = "manbaout"; return arr; }