0
点赞
收藏
分享

微信扫一扫

C++_名称空间、引用、内联函数

名称空间

//定义名称空间 
namespace namespaceA{
int a=0;
}
namespace namespaceB{
int a=10;
namespace namespaceC{
typedef struct{
int age;
char name[32];
}node;
}
}

//使用方法1
using namespace namespaceB::namespaceC;
node t;

//使用方法2
using namespaceB::namespaceC::node;
node t;

//使用方法3
namespaceB::namespaceC::node t;

引用
引用在C++内部实现是一个常量指针,type *const var
从使用的角度看,相当于变量的一个别名

定义引用格式 
type &name=var;

int a=10;
int &b=a;
b是a的别名,通过操作b可以修改a


引用在某些场合可以代替指针
void change(int &a, int &b){
int c;
c=a;
a=b;
b=c;
}
int main(){
int x=10, y=20;
change(x, y);//可以交换x和y的值
}


复杂数据类型的引用
typedef struct{
int a, b;
}node;
node t;
下面两个函数效果相同
void print(node *t){
cout<<t->a<<t->b;
t->a=10;
}
void print(node &t){
cout<<t.a<<t.b;
t.a=10;
}


int a=10;
int &b=a;
此时a和b的地址相同


普通引用有自己的内存空间
struct node{
int a;
int b;
int &c;
int &d;
};
通过sizeof(node)发现c和d各占四个字节

常引用,当其传递给函数时,使其拥有只读属性

int x=10;
const int &y=x;
//此时不能通过y去修改x


常引用的初始化分为两种情况
(1)用变量初始化常引用
int x=10;
const int &y=x;


(2)用字面量初始化常引用
const int a=10;//放入符号表
const int &b=20;//C++编译器会给它分配内存

内联函数
内联函数不可以做函数原型
C++编译器将内联函数直接插入在函数调用的地方
内联函数是对编译器的一种请求,有可能被拒绝
内联函数内部不可以有任何形式的循环和过多的判断
内联函数省去了压栈、跳转和返回的开销

inline void print(){
cout<<"hello world"<<endl;
}
int main(){
print();
return 0;
}


内联函数和宏定义的区别
#define MAX(a, b) ((a)>(b)? (a): (b))
inline int max(a, b){
return a>b?a:b;
}
int main(){
int a=3, b=2;
int c=MAX(++a, b); //((++a)>(b)?(++a):(b)) a=5
int d=max(++a, b); //a=4
return 0;
}


举报

相关推荐

0 条评论