背景
我计划一次创建大量的Matlabtable
对象,以便快速地重复引用它们的内容我的理解是,每个表变量/列都是以写时拷贝的方式处理的也就是说,如果表列未被函数修改,则不会创建新副本。
从1.5年前我对C++的回忆中,我可以确保函数的代码不使用常数正确形式主义来修改它的参数数据。
具体问题
我现在不使用C++,但我希望实现类似的效果,确保我的Matlab函数的代码不会改变所选参数的数据,无论是无意中还是其他。有没有人知道一个非官方的方法来做这件事,或者同样重要的是,这是否是一个不切实际的期望?
我用的是R2015b。
P.S.我在网上搜索到了各种相关文章,例如:
http://www.mathworks.com/matlabcentral/answers/359410-is-it-possible-to-avoid-copy-on-write-behavior-in-functions-yet
http://blogs.mathworks.com/loren/2007/03/22/in-place-operations-on-data
(我需要澄清才能完全理解,但这不是我现在的首要任务)
但是,我不认为我过早地优化了我知道我不想修改表格我只需要一种方法来强制执行它,而不必像创建包装类那样进行扭曲。
我把这个贴在:
*Stack Overflow
*Google groups
最佳答案
在MATLAB中,除了创建一个带有常量(和static?)成员变量但即便如此,你也可以做到:
t = const_table_class.table;
t(1,1) = 0; % Created and modified a copy!
函数不需要将其输入标记为常量的原因是参数总是按值传递的因此本地修改不会修改调用者工作区中的数据
const
是Matlab语言中不存在的东西。另一方面,您可以确定您的数据不会被您调用的任何函数修改因此,只要拥有这些表的函数不修改它们,它们就会保持不变将这些表传递给的任何函数,如果它们试图修改它们,将创建要修改的本地副本这只是局部问题由该副本使用的内存将在函数退出时释放。这将是函数中的一个错误,但不会影响此函数之外的代码。