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

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++中用于输出信息的流对象,它们有一些区别,主要涉及缓冲行为、目标设备和使用场景:

    1. 缓冲行为:

      • ​cerr​​ 和 clog​​ 是非缓冲流对象,输出会立即被发送到目标设备,不会被缓冲起来。这意味着它们的输出是即时的,不受缓冲区满或程序结束的影响。
      • ​cout​​ 是缓冲流对象,它的输出会被缓冲起来,直到缓冲区满或程序结束时才发送到目标设备。这可以提高输出效率,但也可能导致输出在一些情况下不立即显示。
    2. 目标设备:

      • ​cerr​​ 的默认目标设备是标准错误输出(通常是屏幕)。它主要用于输出错误和警告信息,因此不会被重定向到其他设备或文件。
      • ​clog​​ 的默认目标设备也是标准错误输出(通常是屏幕)。它主要用于输出运行时信息、调试信息或其他日志信息,也可以被重定向到其他设备或文件。
      • ​cout​​ 的默认目标设备是标准输出(通常是屏幕),但它可以通过重定向将输出定向到其他设备或文件。
    3. 使用场景:

      • ​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;
    }
    

命名空间

  1. 基本概念

    命名空间是 C++ 中用于组织和管理名称的一种机制。它可以将全局作用域分割成不同的区域,每个区域可以包含变量、函数、类和其他命名实体。命名空间提供了一种避免名称冲突的方式,使得我们可以在程序中使用相同名称的实体而不会发生冲突。​注意:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中​​

  1. 命名空间的定义方法

    使用 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;
    }
    
  1. 命名空间的使用

    使用 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;
    }
    
  1. 嵌套命名空间

    可以在一个命名空间中定义另一个命名空间,这称为嵌套命名空间。嵌套命名空间可以进一步组织和管理命名空间中的实体。

    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;
    }
    
  1. 匿名命名空间

    匿名命名空间是一个特殊的命名空间,其中的实体在当前文件中具有静态生命周期,并且对其他文件不可见。它可以用于定义在当前文件中具有本地作用域的实体。

      1. 作用范围限定:匿名命名空间中定义的变量、函数或类的作用范围仅限于当前文件。其他文件无法直接访问匿名命名空间中的成员。
      2. 避免命名冲突:匿名命名空间可以用于避免与其他文件中的定义发生命名冲突。相同名称的成员在不同的匿名命名空间中是独立的,不会相互冲突。
      3. 匿名命名空间中的成员具有内部链接(internal linkage)的属性,也就是说它们只在当前文件内可见,不会在其他文件中引用到。
    namespace 
    {// 匿名命名空间中的声明和定义
    }
    
    #include <iostream>//匿名命名空间
    namespace 
    {int a = 0;void Print(){std::cout << a << std::endl;}
    }int main()
    {a = 1;Print();return 0;
    }
    
  1. 命名空间的别名

    可以使用 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;
    }
    
  1. 命名空间的合并

    1. 合并在同一个作用域下:命名空间合并只在同一个作用域下生效。
    2. 合并相同名称的命名空间:只有具有相同名称的命名空间才能进行合并。
    3. 合并后成员的可见性:合并后,具有相同名称的命名空间中的成员在合并的作用域内可见。
    //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 代码中&#xff0c;有详细解释持仓价值Value的计算&#xff0c;算是彩蛋。 1. 概述 sizer不能决定操作是买还是卖&#xff0c;意味着需要一个新的概念&#xff0c;通过增加小智能层可以决定买卖&#xff0c;即通过持仓份…...

QT发生弹出警告窗口

QTC开发程序弹出警告窗口&#xff0c;如上图 实施代码&#xff1a; #include <QMessageBox> int main() {// 在发生错误的地方QMessageBox::critical(nullptr, "错误", "发生了一个错误&#xff0c;请检查您的操作。");}上面的文字可以更改&#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通信&#xff0c;主要涉及到SSL/TLS协议的使用&#xff0c;用于提供数据传输的安全性。下面我们将深入探讨如何使用Java进行HTTPS通信。 一、基本概念 HTTPS&#xff0c;全称为Hypertext Transfer Protocol Secure&#xff0c;是HTTP的安全版本。它使用SSL/…...

威联通QNAP NAS结合cpolar内网穿透实现公网远程访问NAS中存储的文件

文章目录 推荐 前言1. 威联通安装cpolar内网穿透2. 内网穿透2.1 创建隧道2.2 测试公网远程访问 3. 配置固定二级子域名3.1 保留二级子域名3.2 配置二级子域名 4. 使用固定二级子域名远程访问 推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣…...

Ubuntu上安装部署Qt

首先需要下载对应的虚拟机软件和ubuntu镜像&#xff0c;虚拟机软件使用VMware或者Virtual Box都行&#xff0c;我用的是前者&#xff0c;这里是VMware的下载链接&#xff1a;下载 VMware Workstation Pro | CN。Ubuntu镜像推荐去清华的网站下载&#xff1a;Index of /ubuntu-re…...

MySQL的`FOR UPDATE`详解

MySQL的FOR UPDATE详解 欢迎阅读本博客&#xff0c;今天我们将深入探讨MySQL中的FOR UPDATE语句&#xff0c;它用于在事务中锁定选择的数据行&#xff0c;确保在事务结束前其他事务无法修改这些数据。 1. FOR UPDATE基础 FOR UPDATE是用于SELECT语句的一种选项&#xff0c;它…...

计算机网络 第4章(网络层)

系列文章目录 计算机网络 第1章&#xff08;概述&#xff09; 计算机网络 第2章&#xff08;物理层&#xff09; 计算机网络 第3章&#xff08;数据链路层&#xff09; 计算机网络 第4章&#xff08;网络层&#xff09; 计算机网络 第5章&#xff08;运输层&#xff09; 计算机…...

HDD的烦恼:HAMR会让SMR黯然失色吗?

HDD相关阅读参考&#xff1a; HDD回暖于2024&#xff0c;与SSD决战于2028 HDD最后的冲刺&#xff1a;大容量硬盘的奋力一搏 叠瓦式磁记录技术&#xff08;SMR&#xff09;自20世纪90年代起开始研究&#xff0c;于2010年后逐渐商业化应用于高密度硬盘。该技术的核心理念在于通…...

linux安装docker(入门一)

环境&#xff1a;centos 7(linux) 网站 官网: https://docs.docker.com/ Docker Hub 网站: https://hub.docker.com/ 容器官方概述 一句话概括容器&#xff1a;容器就是将软件打包成标准化单元&#xff0c;以用于开发、交付和部署。 容器镜像是轻量的、可执行的独立软件包 &…...

Node.js中fs模块

fs模块是Node.js中的一个核心模块&#xff0c;全称为File System&#xff08;文件管理系统&#xff09;。该模块专门用来操作系统中的文件&#xff0c;常用的操作方式是对文件的读取和写入。 fs模块的API大都提供三种操作方式&#xff1a; 同步操作文件&#xff1a;代码会被阻…...

google-webrtc 原理

Google WebRtc Android 使用详解(包括客户端和服务端代码) - 知乎 (zhihu.com) 【记】Android使用WebRTC未释放资源导致的内存泄露 - 掘金 (juejin.cn)...

uniapp 框架搭建及使用

uniapp官方文档 uview官网文档 前期工作&#xff1a; 1.下载Hbuilder X编辑器&#xff1b;2.熟悉uniapp的相关文档&#xff1b;3.查找合适的UI组件库&#xff0c;我使用的是uview&#xff08;适配H5和小程序&#xff09; 创建uniapp 新建: 新项目的话打开Hbuilder X选择项目&…...

嵌入式软件工程师面试题——2025校招社招通用(计算机网络篇)(三十二)

说明&#xff1a; 面试群&#xff0c;群号&#xff1a; 228447240面试题来源于网络书籍&#xff0c;公司题目以及博主原创或修改&#xff08;题目大部分来源于各种公司&#xff09;&#xff1b;文中很多题目&#xff0c;或许大家直接编译器写完&#xff0c;1分钟就出结果了。但…...

《WebKit 技术内幕》学习之十一(4):多媒体

4 WebRTC 4.1 历史 相信读者都有过使用Tencent QQ或者FaceTime进行视频通话的经历&#xff0c;这样的应用场景相当典型和流行&#xff0c;但是基本上来说它们都是每个公司推出的私有产品&#xff0c;而且通信等协议也都是保密的&#xff0c;这使得一种产品的用户基本上不可能…...

k8s基础知识

理解docker [二] - namespace - 知乎 Kubernetes Controller 机制详解&#xff08;一&#xff09;-赵化冰的博客 | Zhaohuabing Blog K8S之自定义Controller - 知乎 Controller - K8S - 知乎 https://coolshell.cn/articles/17010.html/comment-page-2#comment-2133157 ht…...

Docker容器引擎(3)

目录 一.Docker 镜像的创建 1&#xff0e;基于现有镜像创建 2&#xff0e;基于本地模板创建 3.基于Dockerfile创建&#xff1a; Dockerfile 操作常用的指令&#xff1a; ADD 和 COPY 的区别&#xff1f; CMD 和 ENTRYPOINT 的区别&#xff1f; 容器启动命令的优先级 如…...

【Android12】Android Framework系列---Adb和PMS安装apk源码流程

Adb和PMS安装apk源码流程 adb install命令 通过adb install命令可以将apk安装到Android系统&#xff08;注意&#xff1a;特定类型的apk&#xff0c;比如persist类型是无法通过adb安装的&#xff09; 下述命令中adb解析install命令&#xff0c;并调用Android PackageManagerS…...

web漏洞总结大全(基础)

前言 本文章是和cike_y师傅一起写的&#xff0c;cike_y博客&#xff1a;https://blog.csdn.net/weixin_53912233?typeblog 也欢迎大家对本文章进行补充和指正&#xff0c;共同维护这个项目&#xff0c;本文的github项目地址&#xff1a; https://github.com/baimao-box/Sum…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...