C++:命名空间/缺省参数/内联函数/auto/范围for

命名空间
  • ::-作用域限定符+变量/函数:
    • ::a,在全局域中寻找a变量;
  • namespace一个命名空间就定义了一个新的作用域,命名空间中所有内容都局限与该命名空间中;
#include <iostream>
int a =0;
namespace my{//也在全局变量里
    int a =0;
    namespace you{
         int b =0;
     }
}

using my::a;//直接用a的话默认从my域里寻找,不再是就近原则;只展出my里的a;
using namespace my;//使用任何my里的成员都默认从my里找;直接展出整个my域

int main(){
   int a = 3;
   printf("hello world\n");
   printf("%d",a);//就近原则拿到mian里的a;
   printf("%d",::a);//拿到无归属的全局变量a;
   printf("%d",my::a);//拿到my里的全局变量a;
   printf("%d",my::you::b);//拿到my里的you的全局变量b;
   count << a<<endl;//流入对象;
   cin>>a;//控制台的东西流向a中;
}
  • using namespace std;//std-C++库的命名空间;将std展开;也可以使用std::
  • #include <>带.h有命名空间,不带没有;
缺省参数
  • 缺省参数是声明定义函数时为函数的参数指定一个默认值。在调用函数时,如果没有制定实参则采用该默认值,否则使用实参;
int put(int a = 10,b = 20){
    cout<<"a= "<<a<<endl;
    cout<<"b= "<<b<<endl;//没给传参默认a= 10,b=20;
}
  • 全缺省/半缺省-只能从右往左缺省,(int a,int b =10,int c= 20 );没缺省位置必须传;
  • 缺省参数不能在函数声明中同时出现;声明给定义不给;
  • 缺省值必须是常量或全局变量,c不支持;
内联函数
  • 以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数压栈开销,内联函数提升程序的运行效率
特性
  • inline是一种以空间换时间的做法,省去调用函数的额外开销(代码很长/循环/递归的函数不适合使用内联)
  • inline是一个建议,如果有上述情况存在,你即使使用了inline关键字,编译器也不会采用;
  • inline不建议声明和定义分离,分离会导致链接错误,因为inline被展开,就没有函数地址了,链接就无法找到;
宏的优缺点
  • 优点
    • 增强代码的复用性
    • 提高性能
  • 缺点
    • 不方便调试宏(因为与编译阶段进行了替换
    • 导致代码可读性差,可维护性差,容易误用)
    • 没有类型安全的检查。
  • C++有哪些技术替换宏?
    • 常量定义,换用const
    • 函数定义,换用内联函数
auto关键字
  • C++11中,从一个存储类型指示符变成一个类型指示符来只是编译器,要求auto声明的变量必须由编译器在编译时期推导而得
  • 注意:定义变量时必须进行初始化,在编译阶段会根据初始化表达式来推导auto的实际类型,因此auto并非是一种"类型"的声明,而是一个类型声明时的“占位符”,编译器在编译时期会将auto替换为变量的实际类型;
  • 要引用时得加&
  • 不能用来作为函数参数,不能直接用来声明数组;
范围for

当使用传统方法遍历一个数组,可以按照如下方式进行:

void TestFor(){
     int arry[] = {1,2,3,4,5,6,7,8};
     for(int i =0;i<sizeof(array)/sizeof(arr[0]);++i)
     arr[i]*=2;
}

使用范围for

void TestFor(){
   int array[] = {1,2,3,4,5,6,7,8};
   for(auto& e:array)//解引用了
       e*=2;
}
  • for循环后的括号由冒号":"分为两个部分:第一部分时范围内用于迭代的变量,第二部分表示迭代范围;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值