On 01.02.2011 20:01, Michel Fortin wrote:
On 2011-02-01 12:07:55 -0500, Andrei Alexandrescu
<seewebsiteforem...@erdani.org> said:
With this, the question becomes a matter of choosing the right
default: do we want values most of the time and occasional
references, or vice versa? I think most of the time you need
references, as witnessed by the many '&'s out there in code working
on STL containers.
What exactly is "most of the time"? In C++, you pass containers by '&'
for function parameters, using '&' elsewhere is rare.
One thing I proposed some time ago to address this problem (and to
which no one replied) was this:
ref struct Container { ... } // new "ref struct" concept
void func(Container c) {
// c is implicitly a "ref Container"
}
Container a; // by value
func(a); // implicitly passed by ref
Containers would be stored by value, but always passed by ref in
functions parameters.
Thats would not be "per-value" as most understand it.
Container globalC;
func(c);
void func(Container paramC)
{
c.add(42); // modifies globalC in reference-semantics
// leaves globalC as it was in value-semantics
}
Your Idea would be somehow truly value-based if you default not only
to "ref" but to "const ref", because then the function would not be
able to alter globalC. But making parameters default-const was not
considered the right way for D.
- Krox