朕的 发表于 2021-6-27 01:40:15

为何常量用作参数时,常量值可以被修改?

本帖最后由 朕的 于 2021-6-27 01:45 编辑

写了个mysql的扩展,搞半天没找到bug原因,最后原来是赋值的常量被修改了,后面的命令再调用此常量已经变了。后来才发现是常量被修改了。特意试了下易语言,易语言里常量这种操作是不会被修改的,而且传入的程序可以调用赋值后的参数可以得到新的赋值,且常量没有被改。


李先森 发表于 2021-6-27 08:07:08

火山或者c++调用方法(子程序)参数应该是引用传递,你试试执行mysql语句有个“错误信息”参数,就是提供一个变量来接收错误信息的,和这个例子一样的原理

Xelloss0618 发表于 2021-6-27 12:15:26

C/C++ 的 const 常量只提供语法层面的保护,编译器会检查一些对常量进行修改的常规操作,但还有其他一些操作是编译器检查不出的。
就是说你可以用各种奇怪的手段修改 C/C++ 的常量。

龙纹 发表于 2021-6-27 13:00:40

Xelloss0618 发表于 2021-6-27 12:15
C/C++ 的 const 常量只提供语法层面的保护,编译器会检查一些对常量进行修改的常规操作,但还有其他一些操 ...

按帖子中图片那样生成的代码并没有const,只是一个局部静态变量。所以修改是合法的,这里更像是语义的问题,他想要一个常量,编译器却只是生成了一个static修饰的变量。

创世魂 发表于 2021-6-27 13:27:10

参数相当于是个变量。所以这个时候输出的信息已经不是从常量输出了,而是从参数取这个数据。

朕的 发表于 2021-6-27 14:40:53

李先森 发表于 2021-6-27 08:07
火山或者c++调用方法(子程序)参数应该是引用传递,你试试执行mysql语句有个“错误信息”参数,就是提供一 ...

你说的是变量,变量是肯定可以被修改。这个说的是常量,常量被修改了

朕的 发表于 2021-6-27 14:42:40

创世魂 发表于 2021-6-27 13:27
参数相当于是个变量。所以这个时候输出的信息已经不是从常量输出了,而是从参数取这个数据。 ...

也就是说,常量被用作参数时,可以被修改是合理的是吗?

朕的 发表于 2021-6-27 14:48:03

创世魂 发表于 2021-6-27 13:27
参数相当于是个变量。所以这个时候输出的信息已经不是从常量输出了,而是从参数取这个数据。 ...
取值确实可以取,但为何能赋值成功就不知道了

秋天的童话 发表于 2021-6-27 18:01:04

是有点奇怪,加上又是字符串,楼主看看基本数据类型会变化吗?

logan0279 发表于 2021-6-27 23:00:07

试了下,真的是这样。
定义好的常量被传参修改了。。。 。。。
页: [1] 2
查看完整版本: 为何常量用作参数时,常量值可以被修改?