Is it a good idea to mess up with consts?
如您所知,静态数组比动态数组快得多。 C允许您设置静态数组的大小,例如:
1 2
| const unsigned int size = 5;
unsigned int data[size]; |
现在,我听说可以更改const的值了。
a)首先如何更改const的值?
b)如果我执行以下操作:
1 2 3
| const unsigned int size = 5;
somehow change the value of size to 65
unsigned int data[size]; |
我输了什么?似乎太好了,难以置信?
- 修改const数据是未定义的行为。因此,您不能依赖执行此操作的程序。编写不可靠的程序不是一个好主意,因此用const"搞乱"也不是一个好主意。
-
"我听说有可能更改const的值。"这就是传闻。 :)
-
但是那些人会这样做:stackoverflow.com/questions/583076/…
-
@Luka对这个问题的第一条评论:"即使您将其编译。这也是未定义的行为。"
-
即使可以更改const的值,数组的大小也会在编译期间它将被修复。
-
"正如您所知,静态数组比动态数组快得多。"-是吗?您能否详细说明静态数组和动态数组的含义,以及一个数组比另一个数组快多少?
-
我的意思是我在上面发布的数组比malloc或vector要快得多,我已经对此进行了测试。我猜它更快,因为它不会浪费时间分配内存。
-
嗯,所以您分配的速度更快。是的,这是对的,在大多数情况下不是很有趣:分配速度通常不是瓶颈,或者您不能使用堆栈分配,或者根本不需要分配,因为您已经有一些分配。
-
"如您所知",后面是一些非常可疑的内容...
-
来吧,不要因为这个而否决我的问题
-
您应该注意,整个工作没有意义。常数是使代码更易于理解的工具(因此,您可以读取" size "而不是一些晦涩且可能含糊的数字)。如果您想要65的大小,请给您的常数该值。不要试图变得超级聪明并欺骗编译器。即使偶然地"起作用",也没有任何收获。
有可能(请参见此答案),但结果将非常不编译器会在许多地方内联此常量,这就是为什么生成的代码会很快的原因。
因此,您将在某些地方看到size = 65,在其他地方看到size = 5。