C++ 核心关键字深度解析:const 与 static 的本质区别与实战指南
const常量限定符和static静态关键字都是 C 核心关键字但作用完全不同。本文将从变量、指针、函数、类成员四个维度对比两者的语法、特性与最佳实践帮你彻底分清何时用 const何时用 static。一.const用于限定数据不可被修改只读1.修饰普通变量1普通const变量必须初始化将普通变量变为只读常量。2const修饰指针①const 修饰指针指向的值值不可改指针可改int a10; int b20; const int *p1a; //*p130;//报错值只读 p1b;//合法指针可以指向其其他地址②const 修饰指针本身指针不可改值可改int *const p2a;//合法值可以改 *p230; //p2b;//报错指针本身只读③const 同时修饰指针和值都不可改const int* const p3a; //*p330;//报错 //p3b;//报错2.修饰成员函数表示该函数不会修改类的任何成员变量必须放在函数末尾。3.修饰函数参数避免函数内修改参数副本。4.修饰函数返回值禁止返回值被修改。例class Person { private: string name; int age; public: Person(String n,int a):name(n),age(a){} //1. void showInfo()const{ cout姓名name年龄ageendl; //age30;//报错const成员函数不能修改成员变量 } //2. void setName(const string n){ namen;//合法修改的是类成员不是参数 //n李四;//报错参数n是const的 } //3. const int getAge()const{ return age; } }; int main() { Person p(张三,20); p.showInfo(); p.setName(王五); //const返回值的限制 const int agep.getAge(); //age25;//报错返回值是const引用不可修改 return 0; }二.static用于限定变量/函数的作用域和生命周期1.修饰普通变量1修饰局部变量延长生命周期2修饰全局变量 / 函数收缩作用域2.C中修饰类成员静态成员1静态成员变量①必须在类外初始化②访问方式类名::变量名 或 对象名.变量名2静态成员函数①没有 this 指针②只能访问静态成员变量 / 函数不能访问非静态成员③访问方式类名::函数名 或 对象名.函数名3示例#include iostream #include string using namespace std; class Student { public: string name; static int totalCount; // 静态成员变量统计学生总数 Student(string n) : name(n) { totalCount; // 每个对象创建时总数1 } // 静态成员函数获取学生总数 static int getTotalCount() { // return name; // 报错静态函数不能访问非静态成员 return totalCount; } }; // 静态成员变量必须类外初始化 int Student::totalCount 0; int main() { Student s1(张三); Student s2(李四); // 访问静态成员两种方式都可以 cout 学生总数类名访问 Student::totalCount endl; // 输出2 cout 学生总数对象访问 s1.totalCount endl; // 输出2 cout 学生总数静态函数 Student::getTotalCount() endl; // 输出2 return 0; }
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2430538.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!