数据类型、引用与auto

数据类型、引用与auto 数据类型、引用与autoC 在 C 类型系统上的扩展在 C 语言数据类型与变量 中我们学习了int、float、char等基本类型。C 完全保留了这些类型并在此基础上增加了bool、引用、auto等重要特性同时提供了类型安全的iostream输入输出。本篇聚焦 C 相对 C 的类型与 I/O 扩展整型、浮点、字符等基础内容请参阅 C 教程。一、C 基本数据类型回顾与扩展1.1 与 C 兼容的基本类型C 支持 C 的所有基本类型char、short、int、long、float、double等。用法与 C 相同。详细说明见 C 语言数据类型与变量。1.2 C 特有bool 类型C 内置布尔类型bool取值为true或false#includeiostreamintmain(){boolisReadytrue;boolisEmptyfalse;std::coutstd::boolalpha;// 输出 true/false 而非 1/0std::coutisReady: isReadystd::endl;std::coutisEmpty: isEmptystd::endl;intscore85;boolpassed(score60);std::coutpassed: passedstd::endl;return0;}对比CC布尔类型无用 int 0/1 模拟booltrue/false条件判断非零为真同左但 bool 语义更清晰二、引用Reference2.1 什么是引用引用是变量的别名——定义时必须初始化且之后不能绑定到其他对象#includeiostreamintmain(){intoriginal42;intreforiginal;// ref 是 original 的别名ref100;std::coutoriginal: originalstd::endl;// 100std::coutref: refstd::endl;// 100return0;}2.2 引用 vs 指针特性引用int指针int*初始化必须初始化可为空NULL/nullptr重新绑定不能可以指向其他对象解引用直接使用无需*需要*解引用空值不存在空引用可以 nullptr主要用途函数参数、返回值动态内存、可选值voidswap(inta,intb){inttempa;ab;btemp;}intmain(){intx1,y2;swap(x,y);// 直接修改 x、y无需传地址std::coutx, ystd::endl;// 2, 1return0;}指针的完整讲解见 C 语言指针。C 中优先用引用传递非空对象用指针表示可选或动态内存。2.3 const 引用不能通过 const 引用修改原对象常用于函数参数以避免拷贝voidprint(conststd::strings){std::coutsstd::endl;// s other; // 错误不能修改}三、auto 与类型推导C113.1 auto 关键字编译器根据初始化表达式自动推导类型#includeiostream#includevectorintmain(){autoi42;// intautod3.14;// doubleautosstd::string(hello);// std::stringstd::vectorintvec{1,2,3};for(autoitvec.begin();it!vec.end();it){std::cout*it ;}std::coutstd::endl;return0;}3.2 使用建议场景是否推荐 auto迭代器、复杂模板类型推荐简单整型、浮点可选显式类型更清晰函数返回值谨慎需确保可读性3.3 decltype获取表达式的类型常用于模板元编程intx0;decltype(x)y10;// y 的类型与 x 相同为 int四、const 与 constexpr4.1 const与 C 类似表示只读constintMAX_SIZE100;constdoublePI3.14159;4.2 constexprC11编译期常量值在编译时确定constexprintBUFFER_SIZE256;constexprintsquare(intn){returnn*n;}intmain(){intarr[square(5)];// 数组大小为 25编译期确定return0;}五、iostream 输入输出5.1 标准输出 cout#includeiostreamintmain(){intage25;doubleheight1.75;std::cout年龄agestd::endl;std::cout身高height 米std::endl;return0;}与 printf 对比特性printfcout类型安全需手动匹配格式符编译期检查语法printf(%d, x)cout x扩展性固定可重载5.2 标准输入 cin#includeiostreamintmain(){inta,b;std::cout请输入两个整数;std::cinab;std::cout和为abstd::endl;return0;}C 的scanf/printf在 C 中仍可用#include cstdio但推荐优先使用 iostream。5.3 常用操纵符#includeiostream#includeiomanipintmain(){doublepi3.14159265;std::coutstd::fixedstd::setprecision(2)pistd::endl;// 3.14std::coutstd::boolalphatruestd::endl;// truereturn0;}六、类型大小与 sizeof与 C 相同sizeof返回类型或变量占用的字节数#includeiostreamintmain(){std::coutsizeof(int): sizeof(int)std::endl;std::coutsizeof(bool): sizeof(bool)std::endl;std::coutsizeof(double): sizeof(double)std::endl;return0;}七、实战练习练习1引用交换编写void swap(int a, int b)在 main 中验证交换效果。练习2auto 推导声明多个auto变量用typeid或编译器推断确认其类型#includetypeinfo#includeiostreamintmain(){autox10;autoy3.14;std::couttypeid(x).name()std::endl;std::couttypeid(y).name()std::endl;return0;}练习3iostream 计算器用cin/cout实现两数加减乘除对比 C 版scanf/printf的实现。八、总结与延伸本节重点回顾C 保留 C 基本类型新增bool类型引用是别名必须初始化常用于函数参数避免拷贝auto让编译器推导类型简化复杂类型声明iostreamcout/cin提供类型安全的 I/O推荐替代 printf/scanfconstexpr用于编译期常量与函数下节预告下一篇将进入核心语法阶段《运算符与表达式C 扩展特性》学习 new/delete 等 C 运算符。延伸阅读C 语言数据类型与变量C 语言指针C 速查数据类型与引用知识点卡片booltrue/false引用T必须初始化是别名auto编译期类型推导const 引用const T用于只读参数输出std::cout x std::endl输入std::cin xC 基础类型用法见 C 教程C 增量重点在引用、bool、iostream小技巧函数参数中大对象用const T传递避免拷贝简单循环变量可写for (auto i 0; i n; i)⚠️注意事项引用必须初始化不能为空不要返回局部变量的引用或指针悬垂引用混用 cout 与 printf 时注意缓冲区刷新如果你对数据类型与引用有疑问欢迎在评论区留言下一篇见