去年有事无事学过一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. 使用node压缩js

    先下载并安装Node 安装完成后打开cmd运行:node -v 运行:npm -v 确定node安装成功,然后安装uglifyjs,打开cmd输入下面命令: npm install uglify-js ...

  2. 基本定时器TIM6实现精确延时

    1.基本定时器的特点 (1).16位自动重装载累加计数器 (2).16位可编程(可实时修改)预分频器,用于对输入的时钟按系数为1-65536之间的任意数值 !!!注意基本定时器只有向上计数模式,不要被 ...

  3. 使用nvm安装以及管理多版本node教程

    安装nvm.node.npm 下载nvm安装包,推荐使用1.1.7,我个人使用1.1.8会有中文乱码的报错 点击exe文件,注意修改nvm的安装根目录以及node的安装根目录,后者是以后管理多版本no ...

  4. .NET5 ASP.NET Core 使用 EF Core MS SQL SERVER DB First

    .NET5 ASP.NET Core 使用 EF Core MS SQL SERVER DB First 开发工具:VS2019 1.修改appsettings.json,增加一项. "Co ...

  5. 通过JS来触发<a>链接来实现图片下载

    function downloadImg(){ var url = '实际情况的图片URL'; // 获取图片地址 var a = document.createElement('a'); // 创建 ...

  6. 流程控制之case

    1.case语句作用 case和if一样,都是用于处理多分支的条件判断 但是在条件较多的情况,if嵌套太多就不够简洁了 case语句就更简洁和规范了 2.case用法参考 常见用法就是如根据用户输入的 ...

  7. List<Map<String, Object>> 按照时间排序

    // 准备一个集合 List<Map<String, Object>> resList= Lists.newArrayList(); Map<String, Object ...

  8. 为什么boolean 类型的字段不建议使用is开头?

    对于非boolean类型的参数,getter和setter方法命名的规范是以get和set开头 对于boolean类型的参数,setter方法是以set开头,但是getter方法命名的规范是以is开头 ...

  9. ThreadLocal本地局部线程demo

    ThreadLocal本地局部线程demo import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Hash ...

  10. Linux下挂载NTFS格式的U盘

    NTFS是Windows下的格式,在Linux下是识别不了的,要想在Linux上挂载NTFS格式的U盘需要安装软件以提供支持.软件名为ntfs-3g. 1.下载安装包 https://tuxera.c ...