C/C++ - 编程语法特性
目录
标准控制台框架
输入输出对象
命名空间
标准控制台框架
-
头文件
-
#include <iostream>
- 告诉编译器我们要使用iostream库
- 尖括号中的名字指定了某个头文件(header)
-
-
入口函数
- int main(void)
-
返回
- return 0;
-
输出语句
-
std::cout << "Hello 0xCC" << std::endl;
- <<输出运算符
- 运算符左侧为ostream对象
- 运算符右侧为输出内容
- 上述代码等价于std::cout << "Hello 0xCC"; std::cout << std::endl;
- std::endl效果为换行符并且刷新缓冲区
-
-
输入语句
-
std::cin >> a;
- >>输入运算符
- 运算符左侧为istream对象
- 运算符右侧为输入数据
-
-
注释
- / 单行注释 /
- /*多行注释*/
输入输出对象
-
C++语言并未定义任何输入输出(IO)语句,取而代之,包含了一个全面的标准库(standard library)来提供IO机制
-
iostream 库包含两个基础类型istream 和ostream,分别表示输入流和输出流
-
标准输入(standard input) - cin(istrean)对象
-
标准输出(standard output) - cout(ostrean)对象
-
标准错误(standard error) - cerr(警告信息)/clog(运行信息)(ostrean)对象
-
cerr、clog 和 cout 都是C++中用于输出信息的流对象,它们有一些区别,主要涉及缓冲行为、目标设备和使用场景:
-
缓冲行为:
- cerr 和 clog 是非缓冲流对象,输出会立即被发送到目标设备,不会被缓冲起来。这意味着它们的输出是即时的,不受缓冲区满或程序结束的影响。
- cout 是缓冲流对象,它的输出会被缓冲起来,直到缓冲区满或程序结束时才发送到目标设备。这可以提高输出效率,但也可能导致输出在一些情况下不立即显示。
-
目标设备:
- cerr 的默认目标设备是标准错误输出(通常是屏幕)。它主要用于输出错误和警告信息,因此不会被重定向到其他设备或文件。
- clog 的默认目标设备也是标准错误输出(通常是屏幕)。它主要用于输出运行时信息、调试信息或其他日志信息,也可以被重定向到其他设备或文件。
- cout 的默认目标设备是标准输出(通常是屏幕),但它可以通过重定向将输出定向到其他设备或文件。
-
使用场景:
- cerr 通常用于输出错误和警告信息,它的输出是非缓冲的,以便尽快显示错误信息,不受缓冲区满或程序结束的影响。
- clog 通常用于输出运行时信息、调试信息或其他日志信息,它的输出是缓冲的,以提高输出效率,但可能不会立即显示。
- cout 是最常用的输出流对象,用于一般的标准输出,它的输出是缓冲的,可以在合适的时机进行刷新。
总结:
- cerr 用于输出错误和警告信息,非缓冲。
- clog 用于输出运行时信息、调试信息或其他日志信息,缓冲。
- cout 用于一般的标准输出,缓冲。
在实际使用中,根据需要选择适当的输出流对象,以满足不同类型的输出要求。
#include <iostream>int main() {std::cout; //std::ostream;std::cerr; //std::ostream;std::clog; //std::ostream;std::cin; //std::istream;std::cout << "cout" << std::endl;std::cerr << "cerr" << std::endl;std::clog << "clog" << std::endl;return 0; } -

命名空间
-
基本概念
命名空间是 C++ 中用于组织和管理名称的一种机制。它可以将全局作用域分割成不同的区域,每个区域可以包含变量、函数、类和其他命名实体。命名空间提供了一种避免名称冲突的方式,使得我们可以在程序中使用相同名称的实体而不会发生冲突。注意:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中
-
命名空间的定义方法
使用 namespace 关键字定义命名空间,语法如下:
#include <iostream>namespace CC_STD {int HP;//内部声明void Fun(int add); }//外部定义 void CC_STD::Fun(int add) {CC_STD::HP += add; }int main() {CC_STD::HP = 1;CC_STD::Fun(100);return 0; }
-
命名空间的使用
使用 using 声明或限定符访问命名空间中的成员。
#include <iostream>using namespace std;int main() {cout << "0xCC" << endl;return 0; }使用 using 声明可以将命名空间中的一个或多个成员引入当前作用域,使其可直接使用,语法如下:
#include <iostream>void cout() {}int main() {using std::cout;using std::endl;cout << "0xCC" << endl;std::string;return 0; }
-
嵌套命名空间
可以在一个命名空间中定义另一个命名空间,这称为嵌套命名空间。嵌套命名空间可以进一步组织和管理命名空间中的实体。
namespace outer_namespace {namespace inner_namespace {// 嵌套命名空间中的声明和定义} }#include <iostream>namespace CC_TOOLS {int nVer;namespace CC_IO{int nOutput;void Print();} }void CC_TOOLS::CC_IO::Print() {std::cout << nOutput << std::endl; }int main() {CC_TOOLS::CC_IO::nOutput = 123;CC_TOOLS::CC_IO::Print();return 0; }
-
匿名命名空间
匿名命名空间是一个特殊的命名空间,其中的实体在当前文件中具有静态生命周期,并且对其他文件不可见。它可以用于定义在当前文件中具有本地作用域的实体。
-
- 作用范围限定:匿名命名空间中定义的变量、函数或类的作用范围仅限于当前文件。其他文件无法直接访问匿名命名空间中的成员。
- 避免命名冲突:匿名命名空间可以用于避免与其他文件中的定义发生命名冲突。相同名称的成员在不同的匿名命名空间中是独立的,不会相互冲突。
- 匿名命名空间中的成员具有内部链接(internal linkage)的属性,也就是说它们只在当前文件内可见,不会在其他文件中引用到。
namespace {// 匿名命名空间中的声明和定义 }#include <iostream>//匿名命名空间 namespace {int a = 0;void Print(){std::cout << a << std::endl;} }int main() {a = 1;Print();return 0; } -
-
命名空间的别名
可以使用 namespace 关键字为命名空间定义别名,方便使用和引用。
namespace alias_name = namespace_name;#include <iostream>namespace CC_STD {int a; }int main() {//typedef//using//namespace newname = oldname;namespace CC = CC_STD;CC::a = 1;CC_STD::a = 2;return 0; }
-
命名空间的合并
- 合并在同一个作用域下:命名空间合并只在同一个作用域下生效。
- 合并相同名称的命名空间:只有具有相同名称的命名空间才能进行合并。
- 合并后成员的可见性:合并后,具有相同名称的命名空间中的成员在合并的作用域内可见。
//main.cpp #include <iostream> #include "Header.hpp"namespace CC_TOOLS {int nVer;int nKey;namespace CC_IO{int nInput;int nOutput;} }int main() {return 0; }//Header.hpp #pragma once namespace CC_TOOLS {int nNum; }
相关文章:
C/C++ - 编程语法特性
目录 标准控制台框架 输入输出对象 命名空间 标准控制台框架 头文件 #include <iostream> 告诉编译器我们要使用iostream库尖括号中的名字指定了某个头文件(header) 入口函数 int main(void) 返回 return 0; 输出语句 std::cout << "H…...
Backtrader 文档学习-Target Orders
Backtrader 文档学习-Target Orders 第五部分 ipython 代码中,有详细解释持仓价值Value的计算,算是彩蛋。 1. 概述 sizer不能决定操作是买还是卖,意味着需要一个新的概念,通过增加小智能层可以决定买卖,即通过持仓份…...
QT发生弹出警告窗口
QTC开发程序弹出警告窗口,如上图 实施代码: #include <QMessageBox> int main() {// 在发生错误的地方QMessageBox::critical(nullptr, "错误", "发生了一个错误,请检查您的操作。");}上面的文字可以更改&#x…...
vue3使用特殊字符@、~代替路径src
在vite.config.js中引入 import { resolve } from pathexport default defineConfig({resolve:{alias:{~:resolve(__dirname,src)}} })vue3使用特殊字符、~代替路径src_vue3 ~/-CSDN博客...
Java中的HTTPS通信
在Java中实现HTTPS通信,主要涉及到SSL/TLS协议的使用,用于提供数据传输的安全性。下面我们将深入探讨如何使用Java进行HTTPS通信。 一、基本概念 HTTPS,全称为Hypertext Transfer Protocol Secure,是HTTP的安全版本。它使用SSL/…...
威联通QNAP NAS结合cpolar内网穿透实现公网远程访问NAS中存储的文件
文章目录 推荐 前言1. 威联通安装cpolar内网穿透2. 内网穿透2.1 创建隧道2.2 测试公网远程访问 3. 配置固定二级子域名3.1 保留二级子域名3.2 配置二级子域名 4. 使用固定二级子域名远程访问 推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣…...
Ubuntu上安装部署Qt
首先需要下载对应的虚拟机软件和ubuntu镜像,虚拟机软件使用VMware或者Virtual Box都行,我用的是前者,这里是VMware的下载链接:下载 VMware Workstation Pro | CN。Ubuntu镜像推荐去清华的网站下载:Index of /ubuntu-re…...
MySQL的`FOR UPDATE`详解
MySQL的FOR UPDATE详解 欢迎阅读本博客,今天我们将深入探讨MySQL中的FOR UPDATE语句,它用于在事务中锁定选择的数据行,确保在事务结束前其他事务无法修改这些数据。 1. FOR UPDATE基础 FOR UPDATE是用于SELECT语句的一种选项,它…...
计算机网络 第4章(网络层)
系列文章目录 计算机网络 第1章(概述) 计算机网络 第2章(物理层) 计算机网络 第3章(数据链路层) 计算机网络 第4章(网络层) 计算机网络 第5章(运输层) 计算机…...
HDD的烦恼:HAMR会让SMR黯然失色吗?
HDD相关阅读参考: HDD回暖于2024,与SSD决战于2028 HDD最后的冲刺:大容量硬盘的奋力一搏 叠瓦式磁记录技术(SMR)自20世纪90年代起开始研究,于2010年后逐渐商业化应用于高密度硬盘。该技术的核心理念在于通…...
linux安装docker(入门一)
环境:centos 7(linux) 网站 官网: https://docs.docker.com/ Docker Hub 网站: https://hub.docker.com/ 容器官方概述 一句话概括容器:容器就是将软件打包成标准化单元,以用于开发、交付和部署。 容器镜像是轻量的、可执行的独立软件包 &…...
Node.js中fs模块
fs模块是Node.js中的一个核心模块,全称为File System(文件管理系统)。该模块专门用来操作系统中的文件,常用的操作方式是对文件的读取和写入。 fs模块的API大都提供三种操作方式: 同步操作文件:代码会被阻…...
google-webrtc 原理
Google WebRtc Android 使用详解(包括客户端和服务端代码) - 知乎 (zhihu.com) 【记】Android使用WebRTC未释放资源导致的内存泄露 - 掘金 (juejin.cn)...
uniapp 框架搭建及使用
uniapp官方文档 uview官网文档 前期工作: 1.下载Hbuilder X编辑器;2.熟悉uniapp的相关文档;3.查找合适的UI组件库,我使用的是uview(适配H5和小程序) 创建uniapp 新建: 新项目的话打开Hbuilder X选择项目&…...
嵌入式软件工程师面试题——2025校招社招通用(计算机网络篇)(三十二)
说明: 面试群,群号: 228447240面试题来源于网络书籍,公司题目以及博主原创或修改(题目大部分来源于各种公司);文中很多题目,或许大家直接编译器写完,1分钟就出结果了。但…...
《WebKit 技术内幕》学习之十一(4):多媒体
4 WebRTC 4.1 历史 相信读者都有过使用Tencent QQ或者FaceTime进行视频通话的经历,这样的应用场景相当典型和流行,但是基本上来说它们都是每个公司推出的私有产品,而且通信等协议也都是保密的,这使得一种产品的用户基本上不可能…...
k8s基础知识
理解docker [二] - namespace - 知乎 Kubernetes Controller 机制详解(一)-赵化冰的博客 | Zhaohuabing Blog K8S之自定义Controller - 知乎 Controller - K8S - 知乎 https://coolshell.cn/articles/17010.html/comment-page-2#comment-2133157 ht…...
Docker容器引擎(3)
目录 一.Docker 镜像的创建 1.基于现有镜像创建 2.基于本地模板创建 3.基于Dockerfile创建: Dockerfile 操作常用的指令: ADD 和 COPY 的区别? CMD 和 ENTRYPOINT 的区别? 容器启动命令的优先级 如…...
【Android12】Android Framework系列---Adb和PMS安装apk源码流程
Adb和PMS安装apk源码流程 adb install命令 通过adb install命令可以将apk安装到Android系统(注意:特定类型的apk,比如persist类型是无法通过adb安装的) 下述命令中adb解析install命令,并调用Android PackageManagerS…...
web漏洞总结大全(基础)
前言 本文章是和cike_y师傅一起写的,cike_y博客:https://blog.csdn.net/weixin_53912233?typeblog 也欢迎大家对本文章进行补充和指正,共同维护这个项目,本文的github项目地址: https://github.com/baimao-box/Sum…...
别再傻傻分不清!用Python+Matplotlib手把手教你画出NBI和WBI的频谱与时频图
用PythonMatplotlib实战解析NBI与WBI的频谱与时频特性 在信号处理领域,窄带干扰(NBI)和宽带干扰(WBI)的区分对雷达系统、通信工程等应用至关重要。理论教材中复杂的数学公式常常让初学者望而生畏,而可视化呈现能瞬间让抽象概念变得直观可感。本文将带您用…...
基于MCP协议与Playwright构建AI浏览器自动化服务器
1. 项目概述:当AI助手学会“动手”,一个浏览器自动化MCP服务器的诞生如果你和我一样,日常重度依赖Claude、Cursor这类AI编程助手,那你肯定遇到过这样的场景:你正和AI热烈地讨论一个技术方案,突然需要它帮你…...
ZimaOS Blue:本地优先AI代理运行时,打造私有化智能助手
1. 项目概述:ZimaOS Blue,一个为“大胆构建者”准备的本地优先AI代理运行时 如果你和我一样,对当前AI应用生态里那些动辄需要联网、依赖特定云服务、数据隐私存疑的“智能助手”感到厌倦,同时又渴望一个能真正运行在自己设备上、…...
Loop:Mac窗口管理的终极免费解决方案,告别杂乱桌面
Loop:Mac窗口管理的终极免费解决方案,告别杂乱桌面 【免费下载链接】Loop Window management made elegant. 项目地址: https://gitcode.com/GitHub_Trending/lo/Loop 你是否曾为Mac上杂乱的窗口而烦恼?当多个应用同时打开时ÿ…...
构建可靠AI智能体:从提示词工程到结构化内容生成的实战指南
1. 项目概述与核心思路最近在折腾AI应用开发,特别是想搞一个能稳定输出、逻辑清晰、还能带点“人味儿”的文本生成工具。市面上现成的方案要么太“机械”,要么定制化程度不够,总感觉差点意思。后来,我在一个开发者社区里看到了一个…...
Windows XP图标主题完整指南:如何为现代Linux系统注入经典怀旧风格
Windows XP图标主题完整指南:如何为现代Linux系统注入经典怀旧风格 【免费下载链接】Windows-XP Remake of classic YlmfOS theme with some mods for icons to scale right 项目地址: https://gitcode.com/gh_mirrors/win/Windows-XP 还在为现代Linux桌面环…...
如何将Android电视变身全能上网终端:TV Bro电视浏览器终极指南
如何将Android电视变身全能上网终端:TV Bro电视浏览器终极指南 【免费下载链接】tv-bro Simple web browser for android optimized to use with TV remote 项目地址: https://gitcode.com/gh_mirrors/tv/tv-bro 还在为智能电视上网操作困难而烦恼吗…...
开源机械爪OpenClaw Max:从设计原理到实践应用全解析
1. 项目概述:从开源机械爪到OpenClaw Max的进化之路如果你和我一样,对机器人、自动化或者DIY硬件充满热情,那么“机械爪”这个组件一定不会陌生。它就像是机器人的“手”,是实现抓取、搬运、操作等复杂任务的核心执行器。市面上有…...
3个为什么让Windows Cleaner成为你的C盘救星?深度体验报告
3个为什么让Windows Cleaner成为你的C盘救星?深度体验报告 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 你是不是也遇到过这样的情况?电…...
基于Tauri框架构建轻量级ChatGPT桌面客户端:从原理到实践
1. 项目概述:一个基于Tauri的ChatGPT桌面客户端 最近在折腾AI应用本地化部署的时候,发现了一个挺有意思的项目: pljhonglu/ChatGPT-T 。这是一个用Tauri框架开发的ChatGPT桌面客户端,它的前端界面直接复用了开源项目 chatgpt-…...
