为什么这么多的编程语言使得函数可以将传递给它的对象作为参数进行修改,而不需要某种语法来使调用者清楚。例如考虑:清除函数可以修改其参数
SomeObject A(15), B
B = DoSomething(A)
print(A + " " + B + "\n)
读取代码,你会希望输出是类似于“15 75”,即A是你构造它。然而,大多数语言都可以让DoSomething改变A.在C++中,你可以通过查看DoSomething的声明来判断它是否可能,例如通过查看参数被定义为非const引用。然而,在很多语言中,比如Python,如果没有阅读函数的代码以确保它永远不会改变,真的没有办法告诉A.
我很多次被这个问题困扰过,特别是在尝试工作时与别人的代码使用这种行为,通常会导致贯穿整行代码逐行尝试并找到什么改变参数...
为什么它是语言通常不需要一些显式语法通过调用说“是的,这个对象可以修改”,例如说“B = DoSomething(inout A)”?
是否有任何编码标准有助于防止问题发生,除了“从不修改传入函数的参数”?
选择一种语言; “这么多的编程语言”是很多语言,每种语言的设计决定都不一样。 – 2009-07-17 07:43:38
Python,C,C++,Java都可以完全按照我的示例中所示的那样进行,我怀疑还有很多我不知道/使用的东西。 – 2009-07-17 12:06:52