std.algorithm.copy 和 std.digest
std.algorithm.copy and std.digest
当我在 std.digest
对象上使用 std.algorithm.copy
时,与逐字节使用 put
相比,我得到不同的结果。为什么?
import std.stdio;
import std.digest.digest;
import std.digest.md;
import std.algorithm;
void main() {
string s = "Hello!\n";
auto d1 = makeDigest!MD5;
auto d2 = makeDigest!MD5;
foreach (ubyte b; s) {
d1.put(b);
}
s.copy(d2);
writeln(digest!MD5(s).toHexString);
writeln(d1.finish().toHexString);
writeln(d2.finish().toHexString);
}
输出:
E134CED312B3511D88943D57CCD70C83
E134CED312B3511D88943D57CCD70C83
D41D8CD98F00B204E9800998ECF8427E
d2是传值复制。数据在函数内部被复制,但是当它 returns 时, 外部 上的 d2
变量未被修改!
我觉得这可能是一个错误:当前的行为对我来说意义不大。当您复制它时,通过引用进行复制是有意义的。单元测试仅测试半引用数组(它们是指针)并且它适用于它们。
当我在 std.digest
对象上使用 std.algorithm.copy
时,与逐字节使用 put
相比,我得到不同的结果。为什么?
import std.stdio;
import std.digest.digest;
import std.digest.md;
import std.algorithm;
void main() {
string s = "Hello!\n";
auto d1 = makeDigest!MD5;
auto d2 = makeDigest!MD5;
foreach (ubyte b; s) {
d1.put(b);
}
s.copy(d2);
writeln(digest!MD5(s).toHexString);
writeln(d1.finish().toHexString);
writeln(d2.finish().toHexString);
}
输出:
E134CED312B3511D88943D57CCD70C83
E134CED312B3511D88943D57CCD70C83
D41D8CD98F00B204E9800998ECF8427E
d2是传值复制。数据在函数内部被复制,但是当它 returns 时, 外部 上的 d2
变量未被修改!
我觉得这可能是一个错误:当前的行为对我来说意义不大。当您复制它时,通过引用进行复制是有意义的。单元测试仅测试半引用数组(它们是指针)并且它适用于它们。