c++ - 算法能否安全地解决输入到输出的 self 分配问题?

标签 c++ algorithm variable-assignment

我正在开发一个应用程序,我在其中定义了多个算法来处理一组数据,具有通用形式:

将[算法[k]]应用于[i]处的数据并保存在[o]处

缩小我的疑问:

a) 输入和输出可能是同一个对象,例如对图像应用高斯滤波器时。

b) 算法有可能解析为空操作,例如将数据数组插值到其他相同大小的数据时。

当(a)和(b)同时发生时,算法的以下部分

o[output_position]=process(i[input_position]);

会下定决心

o[output_position]=o[output_position];

这样安全吗?


一些不完善的推理:

我认为是的,主要是因为(但我对这个假设没有信心)内存到内存的移动解析为内存到寄存器到内存的移动。

它适用于一些简单的测试,但我没有知识可以对别人说“看看我设计良好的代码”。

我计划使用优化标志进行编译并继续进行项目的其他部分,所以我担心在未来的某个地方事情会变得糟糕,并且在调试器上度过另一个美好的一天来跟踪这个 self 分配。

提前致谢。

最佳答案

这完全取决于 o[output_position] 的类型。如果它正确地实现了赋值运算符,那就没问题了。正确实现的赋值运算符始终可以很好地处理自赋值。

C++ 中赋值运算符的惯用实现使用 copy-and-swap idiom .这意味着正确的自赋值,即使没有您经常在其他实现中看到的 this != &other 检查。

关于c++ - 算法能否安全地解决输入到输出的 self 分配问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22820042/

相关文章:

c++ - 关于异常,覆盖标准异常方法

algorithm - 将所有 A 替换为 B,将所有 B 替换为 A

algorithm - 包含并行性的 Big-O 表示法版本?

Javascript变量初始化语法

函数内部的 C++ 指针创建和赋值

java - java.lang.String 和 String 之间的类型不匹配错误

c++ - HashTable... 错误:静态断言失败:std::hash 不专门用于此类型

c++ - std::getline with char* 到字符串

c++ - 放置新的奇怪行为

algorithm - 如何找到 anagram 算法的时间复杂度