去年有事无事学过一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
无符号字符型8 位存储无符号的单个字符或数值
charsigned
有符号字符型8 位存储有符号的单个字符或数值
charbool
布尔型通常由编译器决定存储逻辑值(真/假
)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; 命令时,含有零宽空格的表名后面的边框线 “|” 与其他行是不对齐的。这可以快速发现问题表,
但并不显示具体字符。当然这方式一般不适用于第三方开发工具、业务程序等。
标签:std,字符,复习,第一部,int,c++,long,类型,include From: https://www.cnblogs.com/ZzwWan/p/18164516