去年有事无事学过一c++ ,,由于工作用不上,学来没有用,所以学得乱七八的,最近需要复习一下,因为最近想学习一下硬 件相关

第一   引用头文件和自定义头

#include <iostream>
using namespace std; //引用命名空间可以避免使用::语法
int main()
{
默认输出写法:std::cout << "Hello, world!" << std::endl;
cout << "Hello World!" << endl;
return 0;
}
使用建议
对于小型代码或示例代码,使用 using namespace std; 通常是安全的。对于大型项目或库,建议显式地使用 std:: 前缀,以避免潜在的名称冲突,并提高代码的可读性
和可维护性。std 命名空间是 C++ 编程的基础部分,理解和正确使用它对于编写健壮和高效的 C++ 代码至关重要。 

常见第三方库

std包含的内容
std 命名空间包含了许多类、函数和对象,例如:
输入输出库(如 std::cout , std::cin , std::endl )
容器类(如 std::vector , std::map , std::set )
字符串类( std::string )
异常类( std::exception 和相关子类)
算法(如 std::sort , std::find )
实用工具(如 std::pair , std::tuple )

自定义库,新建一上h 文件

#ifndef CIR_H
#define CIR_H
namespace Cir {
const double PI = 3.141592653;
double areaOfCircle(double radius){
return PI*radius*radius;
}
double lenthOfCircle(double radius){
return 2*PI*radius;
}
}
#endif // CIR_H

然后主类引用,总结就是可能把一些类的定义写在别的文件,主类写逻辑

#include "cir.h"
#include <stdio.h>
int main()
{
double radius = 5;
printf("半径为%f的圆,周长为%f,面积为%f\n",
radius,Cir::lenthOfCircle(radius), Cir::areaOfCircle(radius));
return 0;
}
在 C++ 中, <climits> (或在 C 中是 <limits.h> )是一个标准头文件,提供了关于整型限制的信息。这个头文件中定义了各种整型数据类型的属性,如最大值、最小值等。使用这些信息可以帮助你了
解在特定编译器和平台上各种数据类型的大小和范围。

如何使用 <climits>
要使用 <climits> 中定义的常量,你首先需要包含这个头文件:
#include <climits>
然后,你可以使用它提供的各种常量,例如:
INT_MAX : int 类型的最大值。
INT_MIN : int 类型的最小值。
UINT_MAX : unsigned int 类型的最大值。
LONG_MAX : long int 类型的最大值。
LONG_MIN : long int 类型的最小值。
LLONG_MAX : long long int 类型的最大值。
LLONG_MIN : long long int 类型的最小值。
示例代码
下面是一个简单的示例,展示了如何使用 <climits> 中的值:
#include <iostream>
#include <climits>
int main() {
std::cout << "The range of int is from " << INT_MIN << " to " << INT_MAX <<
std::endl;
std::cout << "The maximum value of unsigned int is " << UINT_MAX <<
std::endl;
std::cout << "The range of long long is from " << LLONG_MIN << " to " <<
LLONG_MAX << std::endl;
return 0;
}
这个程序会输出 int 、 unsigned int 和 long long int 类型的最大值和最小值。
注意事项
<climits> 提供的是编译时确定的常量,这意味着这些值在编译时就已经固定,根据编译器和平台
的不同而可能有所不同。
使用这些限制值可以帮助你编写更可移植和安全的代码,特别是在处理可能超出数据类型范围的操
作时

基础部份,系统常见输入输出语法

cin 用于从标准输入(通常是键盘)读取数据。
cout 用于将数据输出到标准输出(通常是屏幕)。
#include<iostream>

int main() {
int number;
std::cout << "Enter a number: ";
std::cin >> number;
std::cout << "You entered: "<< number<< std::endl;
return 0;
}

  

cerr 用于输出错误消息和调试信息。 
#include<iostream>

int main() {
std::cerr << "An error occurred!"<< std::endl;
return 1;
}

 clog 用于记录错误和日志信息。

#include<iostream>

int main() {
std::clog << "An error occurred!"<< std::endl;
return 1;
}

  ifstream 用于从文件读取数据。 ofstream 用于将数据写入文件。

#include<iostream>
#include<fstream>
#include<string> int main() {
std::ifstream file("example.txt");
std::string line; if (file.is_open()) {
while (std::getline(file, line)) {
std::cout<< line<< std::endl;
}
file.close();
} else {
std::cerr << "Unable to open file"<< std::endl;
} return 0;
}

  

 基础数据类型 

C++ 的基础类型主要包括以下几类:
整型(Integer Types)
int8_t 或 signed char: 8位有符号整数
uint8_t 或 unsigned char: 8位无符号整数
int16_t 或 signed short: 16位有符号整数
uint16_t 或 unsigned short: 16位无符号整数
int32_t 或 signed int: 32位有符号整数
uint32_t 或 unsigned int: 32位无符号整数
int64_t 或 signed long long: 64位有符号整数
uint64_t 或 unsigned long long: 64位无符号整数
此外,还有 short, int, long, long long,但这些类型的大小取决于具体的编译器和平台。
浮点型(Floating-Point Types)
float: 单精度浮点数
double: 双精度浮点数
long double: 扩展的双精度浮点数(精度和范围可能因编译器和平台而异)
字符型(Character Types)
char: 字符类型,可以是有符号的或无符号的,取决于编译器和平台。
wchar_t: 宽字符类型,用于支持多字节字符集,如Unicode。
char8_t (C++20起): 用于UTF-8编码的字符。
char16_t: 用于UTF-16编码的字符。
char32_t: 用于UTF-32编码的字符。
布尔型(Boolean Types)
bool: 布尔类型,可以表示真(true)或假(false)。
空类型(Void Type)
void: 表示没有类型,通常用于函数返回类型,表示该函数不返回任何值。
复合类型(Compound Types)(这些不是基础类型,但经常与基础类型一起使用)
数组(Array)
结构体(Struct)
联合体(Union)
枚举(Enumeration)
指针(Pointer)等。
需要注意的是,C++ 标准并没有严格规定某些类型(如 int, long 等)的具体大小,这取决于编译器和目标平台。为了编写可移植的代码,通常建议使用固定宽度的整数类型(如 int32_t)或基于特定需求的类型别名。
另外,C++11 及其后续版本引入了一些新的类型别名和关键字,如 nullptr_t(用于表示空指针的类型),以及用于表示特定大小的整数类型的别名(如 int8_t, uint16_t 等)。这些都在 <cstdint> 或 <stdint.h> 头文件中定义。

  

数据类型	描述	位数 (通常情况下)	用途
int 整型 至少 16 位 一般的整数运算
short int 短整型 至少 16 位 较小范围的整数,节省空间
long int 长整型 至少 32 位 较大范围的整数运算
long long 更长的整型 至少 64位 处理非常大的整数
unsigned int 无符号整型 同 int,通常为32 位 只能为正数的整数运算
float 单精度浮点类型 32 位 需要小数点的数值运算,精度较低
double 双精度浮点类型 64 位 需要高精度的数值运算
float单精度浮点类型32 位存储小数,精度约为6-7位有效数字
double双精度浮点类型64 位存储小数,提供更高的精度和范围
long double扩展精度浮点类型80 位或更多提供比double更高的精度和范围
char字符型8 位存储单个字符或作为小整数使用unsigned
char
无符号字符型8 位存储无符号的单个字符或数值signed
char
有符号字符型8 位存储有符号的单个字符或数值
bool布尔型通常由编译器决定存储逻辑值(真/假
wchar_t宽字符类型通常为16位或32位存储宽字符,用于支持多语言
注意:这里的位数是“至少”的要求,实际实现中可能会更多,具体取决于编译器和平台。例如,现代的64位系统中,int通常是32位的,而long int可能是64位的。另外
“用途”一栏是简要描述,实际应用中这些类型的用途可能更加多样和复杂。
最后,请注意,“釐靼覽裉精度浮点类型”似乎是一个输入错误或乱码,我假设你指的是“单精度浮点类型”,所以在上面的表格中我进行了更正。如果这不是你的意思,请提供更多信息以便进行准确的修正。
宽字符的用法
#include <iostream>
#include <locale>
#include <wchar.h>
int main() {
// 设置本地化以支持宽字符
std::setlocale(LC_ALL, "");
// 使用 wchar_t 类型定义一个宽字符串
wchar_t wstr[] = L"你好,世界!";
// 在 C++ 中打印宽字符串
std::wcout << wstr << std::endl;
return 0;
}

宽字符影起mysql建表消失

通过某种方式(如命令行或数据库开发工具等)在数据库 test 中创建了一个名为 lang 的表。表结构如下:
CREATE TABLE `lang` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键自增',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
通过 SHOW TABLES; 命令,我们可以确认这个表的存在。
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| a1 |
| lang |
| t1 |
| z1 |
+----------------+
4 rows in set (0.00 sec)
但是,当你尝试在 MySQL 客户端执行 SELECT * FROM lang; 查询或者业务程序去连接该表时,却收到了错误信息: mysql> select * from lang;
ERROR 1146 (42S02): Table 'test.lang' doesn't exist
表就这么神奇的消失了。
3原因分析
像见了鬼一样,即使反复多次手动输入查询语法,也无法查询到这个表。我们将建表语句复制到 Sublime Text 文本工具中: 图片

此时,我们发现了问题:表名后面跟了一个“<0×200b>”的字符。这就是零宽空格,是零宽字符的一种。

  

解决宽字符带来的问题:
零宽字符是一种特殊的 Unicode 字符,它不占用任何可见空间,因此在大多数情况下是不可见的。然而,它们可以存在于文本中,并且可能对计算机程序产生影响,包括数据库管理系统。在 Unicode 中,U+200B 代表零宽空格,
常用于可能需要换行的地方。除此之外,还有其他零宽字符,这里不再赘述。
那么,这像幽灵一样的字符为何会存在? 所谓存在即合理,零宽字符常常被用于数据防爬、信息加密传递、防止敏感词扫描等场景。但在数据库系统里使用,有时候就会出现让人头疼的现象,本文提到的就是其中之一。
这些字符虽然不占用任何空间,但可能会破坏 SQL 命令的正确结构,导致后续使用出错。
如何解决?
在创建表之前,将建表语句复制到多个文本编辑工具,检查是否有异常符号提示(一般文本工具可能无法显示零宽字符)。经过尝试 Sublime Text、Visual Studio Code 等工具或插件有提醒零宽字符的功能;
还有一些在线网页工具可以查看 Unicode 字符的功能。如果你知道其他能够展示零宽字符的工具,欢迎在评论区留言分享。
在创建表之后,使用 SHOW CREATE TABLE; 命令查看表结构,然后将输出结果复制到上述文本编辑工具中,检查是否有异常符号。
经过多次测试发现,在 MySQL 客户端上执行了 SHOW TABLES; 命令时,含有零宽空格的表名后面的边框线 “|” 与其他行是不对齐的。这可以快速发现问题表,
但并不显示具体字符。当然这方式一般不适用于第三方开发工具、业务程序等。

  

 

c++ 快速复习第一部份的更多相关文章

  1. #021 Java复习第一天

    上学期在慧河工作室学习简单过java到面向对象就停止了 现在有事情又要用到java发现全忘了..... 快速复习一下 网课PPT 计算机: 硬件 + 软件 主要硬件: cpu :cpu是一个计算机的运 ...

  2. Unity 游戏框架搭建 2019 (十八~二十) 概率函数 & GameObject 显示、隐藏简化 & 第二章 小结与快速复习

    在笔者刚做项目的时候,遇到了一个需求.第一个项目是一个跑酷游戏,而跑酷游戏是需要一条一条跑道拼接成的.每个跑道的长度是固定的,而怪物的出现位置也是在跑道上固定好的.那么怪物出现的概率决定一部分关卡的难 ...

  3. Quartz.NET快速上手第一课(官网文档翻译)

    Quartz.NET快速上手第一课(官网文档翻译) 原文链接 在你使用调度者(scheduler)之前,你需要对它进行实例化(谁能猜到这呢?).在实例化scheduler时候,你需要使用ISchedu ...

  4. php复习第一章—1.1php 简介

    php语言是构建互联网应用的后端最佳选择 跨平台 性能优越,稳定性强 语法简单,易于上手 丰富完善的技术扩展 LAMP平台成熟稳定,低成本构建 回顾 web 网页本质是一个文本文件,由浏览器解释文件内 ...

  5. Java复习第一天---Javascript的基本知识点

    1.HelloWord: 2.基础语法: 3.嵌入HTML 借助window.onload事件在整个窗体载入完毕之后运行程序代码 4.事件驱动: 5.DOM操作 5.1 查找元素节点 5.1.1 依据 ...

  6. [状态更新]MSE三个月快速复习计划,成功考上复旦软工

    最后更新,6月21日收到录取通知书啦,感谢当初不曾放弃的自己: 更新一下状态: 3.3日 分数出来了,过了复试线. 最初写这篇博客的时候,是希望自己能够每天或者至少每周更新下自己的复习状态,这样能够确 ...

  7. C#7语法快速参考-第一章 Hello World

    选择IDE 要开始使用C#编程,您需要一个支持微软.NET框架的集成开发环境(IDE).最受欢迎的选择是微软自己的Visual Studio.初学可以使用Visual Studio Community ...

  8. 前端开发必学技能之一———非关系数据库又像关系数据库的MongoDB快速入门第一步下载与安装

    数据库总的来说,分为两个方向:关系数据库和非关系数据库.我们常见的MySQL.Oracle.SQLSerever以及IBMDB2都是属于关系数据库,这里的关系值得是二维表的结构,但是由于随着web的应 ...

  9. android复习第一天-----简单的android常识

    前言:要去面试了,这些天花一些事件把android中简单的知识点来串联的复习一下 1,android中的工程结构 src文件夹:存储android文件的源代码 gen文件夹:有工具自动生成,不要去修改 ...

  10. struts快速入门第一篇 —— struts相关XML配置映射及讲解

    我们回忆一下在学习JavaWeb过程中(Jsp + servlet编程)所感受到的Servlet的不足: 1 Servllet很多时,web.xml中的代码会很多.这样一来,维护起来就不方便,不利于团 ...

随机推荐

  1. 基于docker一键化部署LNMP环境

    cd / && wget https://files.cnblogs.com/files/superlinux/install_lnmp.sh && bash inst ...

  2. java中判断String类型为空和null的方法

    1.判断一个String类型的变量是否为空(即长度为0)或者为null 在Java中,判断一个String类型的变量是否为空(即长度为0)或者为null,通常需要使用两个条件语句来进行检查.这是因为n ...

  3. 京东web端h5st—4.7逆向分析

    声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 目标网站 aHR0cHM6 ...

  4. 算法学习笔记(13): Manacher算法

    Manacher算法 形象的被译为马拉车算法 这个算法用于处理简单的回文字符串的问题.可以在 \(O(n)\) 的复杂度内处理出每一个位置为中心的回文串的最长长度. 为了避免出现偶数长度的回文串,导致 ...

  5. 漫画图解 Go 并发编程之:Channel

    当谈到并发时,许多编程语言都采用共享内存/状态模型.然而,Go 通过实现 Communicating Sequential Processes(CSP)而与众不同.在 CSP 中,程序由不共享状态的并 ...

  6. 关于编译告警 C4819 的完整解决方案 - The file contains a character that cannot be represented in the current code page (number). Save the file in Unicode format to prevent data loss.

    引言 今天迁移开发环境的时候遇到一个问题,同样的操作系统和 Visual Studio 版本,原始开发环境一切正常,但是迁移后 VS 出现了 C4819 告警,上网查了中文的一些博客,大部分涵盖几种解 ...

  7. 准入控制器(Admission Controller):ResourceQuota,ImagePolicyWebhook

    目录 一.系统环境 二.前言 三.准入控制器简介 四.为什么需要准入控制器 五.启用/禁用ResourceQuota资源配额 5.1 查看默认启用/禁用的准入控制器插件 5.2 ResourceQuo ...

  8. Oh-My-Zsh 提示符只显示当前路径,不需要修改主题文件

    我真是服了.就这么一个简单的小问题我在网上找了一个多小时,一大堆 CSDN 文章都是抄 同一篇博客 的教程,所有的博客都要我去把 ~/.oh-my-zsh/themes/*.zsh-theme 文件里 ...

  9. 开发工具-eclipse/idea 在运行前执行一些动作

    毫无疑问,我们有的时候想在运行/编译程序前后执行一些动作.eclipse和idea都能支持. 日前正好遇到一个问题:有个依赖于pom的某个jar,内容虽然变了,但是版本不变,所以希望每次执行前先清除特 ...

  10. VSCode因网络问题导致下载更新/扩展出错

    VSCode因网络问题导致下载更新/扩展出错 可尝试方法:   问题0: VSCode出现网络问题排查方法?       法1: 启动时加上选项 --log-net-log=netlog.json   ...