有什么区别:
int size = 10000;
和
const int size = 10000;
此代码处理数组,其中大小变量名称将作为数组 [大小] 进入数组。
我如何在我的代码中使用它:
int main() {
int size = 50000; // here is where I had const before
int * items;
items = new int [size];
//random array for bubbleSort
for (int i = 0; i < size; i++) {
items[i] = rand();
}
clock_t start, end;
assert((start = clock()) != -1);
sort1(items, size); //bubbleSort
end = clock();
cout << "bubbleSort(random): " << (double)(end - start)/CLOCKS_PER_SEC << " seconds" << endl;
原文由 Teej 发布,翻译遵循 CC BY-SA 4.0 许可协议
const
在 C++ 中有很多效果。第一个也是最明显的是,它意味着一个值是只读的。稍微扩展您的示例:
在这种情况下,这意味着
size2
确实是一个常数。 C++ 标准有一些特殊的语言允许编译器消除const
变量,只要你只以不需要它有地址的方式使用它,就将其视为一个值.另一个效果是 const 限定值有可能被用作常量表达式,因此它可以用于非常量表达式不能使用的几种方式,例如定义数组1的大小(但请注意你很少想在 C++ 中使用数组——通常首选
std::vector
)。另一个效果(在 C++ 中,但不是 C 中)是将变量定义为
const
也使它成为static
,所以在你的情况下(变量似乎是在任何函数之外定义的)非限定变量是全局的,因此可以从另一个翻译单元(源文件)中看到它,并带有适当的extern
声明。const
变量不能。请注意,当
const
通过指针或引用应用时,它确实意味着“只读”,而不是“常量”。例如,给定如下函数:…
foo
内的代码无法写入bar
所指的任何内容, 但bar
可以绑定到非常量变量,因此其他代码直接引用它可以修改它。考虑到多线程,甚至 --- 中的代码可以从bar
foo
读取两个(或更多)不同的值,即使foo
中的代码可以修改fbar
本身。请注意,
const
也可以应用于整个class
,例如在const
限定成员函数中:This basically changes the type of
this
fromfoo * const
tofoo const * const
, so you can’t write to any part offoo
in that member功能(除了抛弃const
,你真的不应该这样做)。还有一种方法可以绕过这个限制:在少数情况下,一个类会做一些事情,比如缓存(也就是记忆)一个值。例如,如果它有一个计算成本很高的值,它可能会在计算后存储该值,因此如果再次请求它就不必重新计算。在这种情况下,您可以将该变量标记为
mutable
,即使通过指向const
的指针(或引用const
)访问它也可以修改它.1. 请注意,某些编译器,尤其是 gcc,有一个扩展,允许您定义大小不是常量的非全局数组,因此这可能是一个有点误导的标准。虽然这是 C++ 的扩展,但它是 C 的标准部分(从 C99 开始)。