C++小记(一)
程序员文章站
2022-03-11 22:33:54
...
Namespace 命名空间
作用:避免重复定义,解决合作开发中命名冲突的问题
例:
#include <iostream>
using namespace std;
namespace A
{
int a = 1;
void print()
{
cout << "namespace A" << endl;
}
}
namespace B
{
int a = 2;
void print()
{
cout << "namespace B" << endl;
}
}
namespace C //命名空间的嵌套
{
namespace D
{
int a = 3;
void print()
{
cout << "namespace C::D" << endl;
}
}
}
int main()
{
/*using namespace A; // 命名空间的使用,此优先级高于后面的使用方法
//cout << "a = " << a << endl;
//cout << "a = " << B::a << endl;
//using B::a; //命名空间的使用2,此优先级略低
//cout << "a = " << a << endl;
//print();
//cout << "a = " << C::D::a << endl;
C::D::print();
return 0;
}
一些C与C++的区别
- register变量,对register变量取地址,C编译时不通过,C++编译时通过,但是该变量转换为普通变量
- C++中不允许重复定义全局变量,C允许
- C中三目运算符的结果不能作为赋值的左值,C++可以
插曲1:
const与#define的区别
const在函数内部有效,局部变量;#define从这一行代码开始往下都有效
引用
引用一定要初始化,但是不能用常量初始化引用
#include "iostream"
using namespace std;
void swap(int &x, int &y)
{
int temp = x;
x = y;
y = temp;
}
struct Test
{
char &x; //引用其实就是常指针
char &y;
};
void init(char *&str)
{
str = (char *)malloc(100);
}
int main()
{
/*
int a = 1 , c = 3;
int &b = a; //定义引用,一定要初始化,但不能用常量初始化
cout << "b = " << b << endl;
swap(a, c);
cout << "a = " << a << " c = " << c << endl;
*/
int a = 1;
char b = 'a';
int &c = a;
char &d = b;
cout << sizeof(c) << endl; //结果为4
cout << sizeof(d) << endl; //结果为1
cout << sizeof(Test) << endl; //结构体中只做声明,引用相当于常指针,结果为8
char *ptr = NULL;
init(ptr); //引用指针
strcpy(ptr, "hello");
cin.get();
return 0;
}
默认参数
默认参数一旦使用,后续形参都必须使用默认参数
int add(a, b = 1, c) //错误写法
int add(a, b = 1, c = 2) //正确写法
占位参数
占位参数主要是为了日后代码修改方便,提升代码的可重用性,为后续需要添加的参数预留位置
int add(int x, int y, int , int )// 后两位即为占位参数,传参时需传递4个参数
占位参数常和默认参数结合使用,如此可减少传参的数量,需要几个传几个,定义遵循默认参数的原则
int add(int x, int y, int = 0, int =0) //后两位占位默认参数
小提重载
构成函数重载的条件:
- 参数的个数不同
- 参数的类型不同
- 参数的顺序不同
返回值的不同不是构成函数重载的条件
上一篇: 荣耀手环6体验如何 荣耀手环6全面评测