为何常量用作参数时,常量值可以被修改?
本帖最后由 朕的 于 2021-6-27 01:45 编辑写了个mysql的扩展,搞半天没找到bug原因,最后原来是赋值的常量被修改了,后面的命令再调用此常量已经变了。后来才发现是常量被修改了。特意试了下易语言,易语言里常量这种操作是不会被修改的,而且传入的程序可以调用赋值后的参数可以得到新的赋值,且常量没有被改。
火山或者c++调用方法(子程序)参数应该是引用传递,你试试执行mysql语句有个“错误信息”参数,就是提供一个变量来接收错误信息的,和这个例子一样的原理 C/C++ 的 const 常量只提供语法层面的保护,编译器会检查一些对常量进行修改的常规操作,但还有其他一些操作是编译器检查不出的。
就是说你可以用各种奇怪的手段修改 C/C++ 的常量。 Xelloss0618 发表于 2021-6-27 12:15
C/C++ 的 const 常量只提供语法层面的保护,编译器会检查一些对常量进行修改的常规操作,但还有其他一些操 ...
按帖子中图片那样生成的代码并没有const,只是一个局部静态变量。所以修改是合法的,这里更像是语义的问题,他想要一个常量,编译器却只是生成了一个static修饰的变量。 参数相当于是个变量。所以这个时候输出的信息已经不是从常量输出了,而是从参数取这个数据。 李先森 发表于 2021-6-27 08:07
火山或者c++调用方法(子程序)参数应该是引用传递,你试试执行mysql语句有个“错误信息”参数,就是提供一 ...
你说的是变量,变量是肯定可以被修改。这个说的是常量,常量被修改了 创世魂 发表于 2021-6-27 13:27
参数相当于是个变量。所以这个时候输出的信息已经不是从常量输出了,而是从参数取这个数据。 ...
也就是说,常量被用作参数时,可以被修改是合理的是吗? 创世魂 发表于 2021-6-27 13:27
参数相当于是个变量。所以这个时候输出的信息已经不是从常量输出了,而是从参数取这个数据。 ...
取值确实可以取,但为何能赋值成功就不知道了 是有点奇怪,加上又是字符串,楼主看看基本数据类型会变化吗? 试了下,真的是这样。
定义好的常量被传参修改了。。。 。。。
页:
[1]
2