当前位置: 首页 > news >正文

名字空间,异常与匿名函数

名字空间基础语法

定义一个名字空间,实际上就是定义一个作用域,在名字空间中可以定义变量、函数等

//ns.cpp
namespace ns
{// 在 ns 中定义变量int a = 1;// 在 ns 中定义函数float f(int x){return x/2;}
}
// ns.h
namespace ns
{// 对名字空间 ns 中的符号进行声明extern int a;extern float f(int x);
}

using的用法

// 形式一:导入整个名字空间中的所有符号
using namespace ns; // 导入名字空间:ns// 形式二:导入名字空间中的指定符号
using ns::a;
using ns::f;

名字空间的层次性

层次相同互相冲突(报错ambiguous),层次不同互相覆盖(小的作用域覆盖大的作用域)

在这里插入图片描述

全局作用域

int a = 0;int main()
{int a = 3;cout << "局部: " << a << endl;cout << "全局: " <<  ::a << endl;
}

内嵌名字空间

定义

// ns.cpp
namespace ns
{int a = 1; // 注意,此处a的全称是 ns::a// 在名字空间中嵌套另一个名字空间namespace nested_ns{int a = 2; // 注意,此处a的全称是 ns::nested_ns::aint x = 100;}
}

声明

// ns.h
namespace ns
{extern int a;namespace nested_ns{extern int a;extern int x;}
}

使用

// main.cpp
#include "ns.h"int main()
{cout << ns::a << endl;cout << ns::nested_ns::a << endl;cout << ns::nested_ns::x << endl;
}

扩展

namespace ns
{int b = 5;
}

异常的抛出和捕获

异常,即 exception,是C++中的基本概念之一,在某段程序发生无法继续正常执行的情况时,C++允许程序进行所谓抛出异常(有时也被称为吐出异常)的行为,这些被抛出的异常,会自动地从触发点开始向外传播,直到被捕获(有时也被称为吞下异常)或者程序终止。

抛出异常(throw)和捕获(catch)

throw "在这里抛出异常"

在这里插入图片描述

// 试图执行可能发生的异常try{r = f(a, b);}catch(const char * &e)//捕获异常,类型为发生异常的返回类型{// 发生了异常cout << e << endl;//打印异常信息break;}

对异常的捕获

#include <iostream>
using namespace std;// 一个简易除法器,返回 a ÷ b 的结果
float divider(float a, float b)
{// 当除数b为0时,抛出异常!if(b == 0)throw static_cast<string>("除数不可为零");return a/b;
}int main(void)
{float a,b;float c;// 从键盘获取被除数a和除数b,并输出结果while(1){cin >> a >> b;try{c = divider(a, b);       cout << c << endl;}catch(string &e){cout << e << endl;}}return 0;
}

注意

  • 异常并不是返回值,靠类型判断时哪一种类型
  • 实际使用使用抛出类对象
  • 遗产总是自动的向上传递

标准异常类

在这里插入图片描述

http://www.dtcms.com/a/392758.html

相关文章:

  • DCM项目wan 1.3b T2V模型comfyui改造流程尝试
  • python编写的第一个appium自动化测试脚本
  • 道客巴巴文库资料免费下载的方法(不需要第三方软件)
  • 【C++】STL详解(九)—priority_queue的使用与模拟实现
  • 【车载开发系列】了解FlashDriver
  • 轻量化 AI 算法:开启边缘智能新时代
  • sward入门到实战(3) - 如何管理文档
  • 贝叶斯优化(Bayesian Optimization)实战:超参数自动搜索的黑科技
  • CSP-S2025 第一轮试题(附答案)
  • python ipynb中运行 报错rpy2 UsageError: Cell magic `%%R` not found.,原因是命令行要用raw的格式
  • 蓝耘智算与DeepSeekR1:低成本高能AI模型
  • Shimmy,超越ollama?
  • LeetCode:36.二叉树的中序遍历
  • python开发环境VSCode中隐藏“__pycache__”目录实践
  • Chrome View渲染机制学习小记
  • C# Protobuf oneof、包装器类型、枚举命名与服务支持
  • 智慧消防:科技赋能,重塑消防安全新生态
  • AI人工智能训练师五级(初级)实操模拟题
  • [数理逻辑] 决定性公理与勒贝格可测性(I) 基础知识
  • Java面向对象之多态
  • 量子计算学习续(第十五周周报)
  • Docker 入门与实践:从零开始掌握容器化技术
  • 个人用户无公网 IP 访问群晖 NAS:神卓 N600 的安全便捷方案(附踩坑经验)
  • Cpolar内网穿透实战:从零搭建远程访问服务
  • 【Python精讲 03】Python核心容器:一篇通关序列(List, Tuple)、映射(Dict)与集合(Set)
  • map_from_arrays和map_from_entries函数
  • 【EE初阶 - 网络原理】网络基本原理
  • 计算机毕设选题+技术栈选择推荐:基于Python的家教预约管理系统设计
  • 密码实现安全:形式化验证技术解析及主流工具实践
  • 并发编程的“造物主“函数——`pthread_create`