I have the following code:
"foo".chars().filter(|c| *c == 'o').collect::<String>()
Is it more idiomatic or less costly at runtime to instead do
"foo".chars().filter(|c| c == &'o').collect::<String>()
I have the following code:
"foo".chars().filter(|c| *c == 'o').collect::<String>()
Is it more idiomatic or less costly at runtime to instead do
"foo".chars().filter(|c| c == &'o').collect::<String>()
I typically do "foo".chars().filter(|&c| c == 'o').collect::<String>()
.
It is as costly as the other example, because reference comparision will load the referenced value.
I prefer the first version. Dereferencing a reference always feels a lot more "normal" than referencing a literal, and &'o'
looks kinda weird.
In terms of performance, I'd assume both compile to roughly the same assembly. Although the first (which is pretty much identical to @matklad's solution) might be a tiny bit faster because the PartialEq
impl for &char
will need to dereference both arguments.
I don't think that difference will survive the optimizer.