C++代码语法总结

本文介绍了C++中命名空间用于解决命名冲突的方法,以及auto语句的类型推断功能,强调了在编程中避免展开全局命名空间的重要性,同时指出了auto语句的使用限制。
摘要由CSDN通过智能技术生成

下面对C++常见的语法进行分析:

1.命名空间
2.auto语句

1.命名空间

为了解决命名冲突的问题,C++之父提出来命名空间的概念

假设我现在要定义两个函数名,都要定义为print(且参数列表要相同,这里跟函数重载有关,下面有详细讨论),此时程序有BUG,,显示我已经重定义了,为了解决这个问题,可以使用命名空间

我将第二个print函数给封装起来了,此时程序不在报错

原因:编译器在寻找函数/变量时,先在局部里找,在往全局找和以展开的命名空间里找

(注意不会去未展开的命名空间里找)

并且搜索优先顺序为   1.局部      2.全局 / 已展开的命名空间里找

请注意展开命名空间的语法可以是 using namespace + 具体名字

  这里展开命名空间是不会报错的,因为第二个print函数是存放在  a 中的,此时展开它,只会影响搜索函数或变量时的查询范围,而不会影响定义,因为此时两个函数的地址已经不一样了(这两个函数已经不一样了)

但此时要去调用print函数,程序会报错,因为编译器不知道去调用哪一个函数,C++中调用函数是通过函数名和参数列表来找函数定义的(这里与函数重载有关)

所以出现命名冲突时,尽量不要展开命名空间,以防出现错误

下面说一下如何展开命名空间中某一函数或变量

using + 命名空间名 ::  变量名 / 函数名

不需使用namespace

 

如何不展开,并且要使用命名空间中的函数/变量

 命名空间名 ::变量名/ 函数名

  

2.auto 语句(auto可以替换类型比较长的定义)

使用auto 语句,必须初始化

例如:auto i = 1;    这个语句与 int i = 1;等价

typeid 可以确定一个对象的类型

语法 typeid(b).name()   确定b是什么数据类型

int x = 1 ; 

auto b = x ; // 此时auto 相当于int

auto* c = &x ;    auto d = &x ; // 这两个语句等价

但是auto* d = 这里必须放指针

注意:1 . auto 语句不能做函数的参数

           2. auro 语句不能声明数组 // auto arr[] = { 1,2,,3,3 }; 这样写是错的

  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值