湛江网站建设技术托管,wordpress换域名后缩略图不显示,网页如何制作网站,南宁网站平台文章目录 QA and 前言const 修饰基本变量初始化const 对象仅在文件内有效 const 的引用应用 指针与 constconst 修饰类成员函数参考写在最后 QA and 前言
Q#xff1a;简要说一说 C 中的 const 关键字#xff0c;含义以及常见的使用位置
A#xff1a;const 是 C… 文章目录 QA and 前言const 修饰基本变量初始化const 对象仅在文件内有效 const 的引用应用 指针与 constconst 修饰类成员函数参考写在最后 QA and 前言
Q简要说一说 C 中的 const 关键字含义以及常见的使用位置
Aconst 是 C 中的一种关键字用来对变量加以限制无法被修改额…
Q具体说一下常量指针与指针常量以及你是如何区分的
A常量指针是 const pointer指针常量是 pointer to const额…
Q好的今天的面试到此结束出去把门带上… const 关键字是 C程序语言开发岗位 面试经常考察的一个知识点这个问题牵涉的考察面特别广从 const 能问到指针、指针常量、常量指针、指向常量的常量指针、常量引用、常函数甚至能问到函数的几种传参形式。今天就来看一看 const 关键字的几种用法。
const 修饰基本变量
有时候我们想定义一种值不能被改变的变量。例如用一个变量来表示缓冲区的大小。使用变量的好处是当我们觉得缓冲区的大小不合适的时候很容易可以对其进行调整。另一方面我们应该防止程序一不小心改变了这个值。为了满足这一要求可以将这一变量定义为 const 类型加以限制
const int bufferSize 512;这样就把 bufferSize 定义成一个常量。任何试图为 bufferSize 赋值的行为都会引发错误。
初始化
const 是英文单词 constant 的缩写形式表示常数、恒定的意思。使用该关键字修饰变量表示变量是恒定的不可以改变的。因为 const 对象一旦创建后其值不能被改变所以 const 对象必须初始化。初始值可以是任何复杂的表达式
const int i get_size(); // 正确运行时初始化
const int j 42; // 正确编译时初始化
const int k; // 错误没有初始化不论是常量对象还是非常量对象都可以初始化常量对象同样的普通对象也可以使用常量对象进行初始化。
int i 42;
const int ci i; // 正确i的值被拷贝给了 ci
int j c1; // 正确ci 的值被拷贝给了 j尽管 ci 是整型常量但无论如何 ci 中的值还是一个整型数。ci 的常量特征仅仅在执行改变 ci 的操作时才会发挥作用。当用 ci 去初始化 j 时根本无须在意 ci 是不是一个常量。
const 对象仅在文件内有效
当以编译器初始化的方式定义一个 const 对象时
const int bufferSize 512;编译器将在编译过程中把用到 bufferSize 的地方都替换为 512.
为了执行上述替换编译器必须知道变量的初始值如果程序包含多个文件则每个用了 const 对象的文件必须得能访问到它的初始值才行。要做到这一点就必须在每一个用到变量的文件中都有对它的定义。为此在默认情况下const 对象被设定为仅在文件内有效。当多个文件中出现同名的 const 变量时其实等于在不同的文件中分别定义了独立的变量。
有些时候我们希望在一个文件中定义 const 变量在其他文件中声明并使用。解决的方法是对于 const 变量不管是声明还是定义都增加 extern 关键字这样只需要定义一次就可以了
// file1.cpp 定义并初始化一个常量该常量能被其他文件访问
extern const int bufferSize fcn();
// file2.h
extern const int bufferSize; // 与 file1.cpp 中定义的 bufferSize 是同一个如果想在多个文件之间共享 const 对象必须在变量的定义之前添加 extern 关键字。 const 的引用
引用可以绑定在常量对象上也可以绑定在非常量对象上。无论引用的对象是常量还是非常量都不会影响引用和对象的绑定关系本身。只有那些不能通过引用改变它绑定的对象的引用才被称为常量引用。换言之常量运用不能通过引用改变它绑定的对象。
常量引用仅对引用可参与的操作做出了限定对于引用的对象本身是不是一个常量未做限定。因为对象可能是个非常量所以允许通过其他途径改变它的值
int i 42;
int r1 i; // 引用 r1 绑定对象 i
const int r2 i; // r2 也绑定对象 i但是不允许通过 r2 修改 i 的值
r1 0; // r1 并非常量可以通过引用 r1 修改 i
r2 0; // 错误r2 是一个常量引用应用
常量引用主要用于以下几种情况
函数参数传递在函数定义中使用常量引用作为参数可以确保传递给函数的参数不会被修改并且避免了不必要的数据复制。
void myFunction(const int x) {// 在函数中不能修改 x 的值// 可以安全地使用 x
}遍历容器使用范围 for 循环遍历容器时如果不需要修改容器的元素可以使用常量引用来提高性能并确保容器不会被修改。
std::vectorint numbers {1, 2, 3, 4, 5};
for (const auto num : numbers) {// 通过常量引用遍历容器避免了不必要的复制并确保容器不会被修改
}返回值类型在函数返回引用类型时如果返回的对象是常量且不应该被修改可以使用常量引用作为返回类型以避免不必要的复制。
const std::string getMessage() {static std::string message Hello, world!;return message; // 返回常量引用避免了不必要的复制并确保返回的对象不会被修改
}总的来说常量引用是一种有效的方式用于提高性能、确保数据的不可修改性并避免不必要的数据复制。对于确定不需要修改的对象建议写成常量引用的形式。
指针与 const
指针与 const 主要包括以下内容
pointer to constconst pointerconst pointer points to const
如果对这些内容已经了然于胸完全可以跳过这一小节如果有不清楚的地方可以参考 【C/C基础】指针与const。
const 修饰类成员函数
在自定义的数据类型类中常常会发现某些成员函数的函数参数列表之后有 const 关键字这样的成员函数被称为常量成员函数。
const 修饰类成员函数其目的是防止成员函数修改被调用对象的值如果我们不想修改一个调用对象的值所有的成员函数都应当声明为 const 成员函数这也是建议的写法。
参考
《C Primer 中文第5版》
写在最后
如果您发现文章有任何错误或者对文章有任何疑问欢迎私信博主或者在评论区指出 。
如果大家对 const 有更完整的整理或更清晰的认识欢迎评论区交流。
最后感谢您的阅读如果有所收获的话可以给我点一个 哦。