Liste des Groupes | Revenir à cl c |
Ben Bacarisse <ben@bsb.me.uk> writes:I had intended to make a brief remark and thought that was all that was needed to answer the question. But having thought about it a bit more (prompted by these last two posts), and tested the code (on the assumption that the gcc writers know the details better than I do), you are correct - I did misunderstand the question. I was wrong in how I thought array reference parameters worked in C++, and the way Ben worded the question re-enforced that misunderstanding.
David Brown <david.brown@hesbynett.no> writes:My guess is he didn't understand the question. The code shown
>On 16/08/2024 12:00, Ben Bacarisse wrote:>
>David Brown <david.brown@hesbynett.no> writes:>
>On 16/08/2024 02:08, Ben Bacarisse wrote:>
>Bart <bc@freeuk.com> writes:>
>In general there is no reason, in a language with true>
call-by-reference, why any parameter type T (which has the form
U*, a pointer to anything), cannot be passed by reference. It
doesn't matter whether U is an array type or not.
I can't unravel this. Take, as a concrete example, C++. You
can't pass a pointer to function that takes an array passed by
reference. You can, of course, pass a pointer by reference, but
that is neither here nor there.
In C++, you can't pass arrays as parameters at all - the language
inherited C's handling of arrays. You can, of course, pass
objects of std::array<> type by value or by reference, just like
any other class types.
The best way to think about C++ (in my very non-expert opinion) is
to consider references as values that are passed by, err...,
value. But you seem prepared to accept that some things can be
"passed by reference" in C++.
That seems a subtle distinction - I'll have to think about it a
little. I like your description of arguments being like local
variable initialisation - it makes sense equally well regardless of
whether the parameter is "int", "int*", or "int&". (It's probably
best not to mention the other one in this group...)
>So if this:>
#include <iostream>
void g(int &i) { std::cout << i << "\n"; }
int main(void)
{
int I{0};
g(I);
}
shows an int object, I, being passed to g, why does this
#include <iostream>
void f(int (&ar)[10]) { std::cout << sizeof ar << "\n"; }
int main(void)
{
int A[10];
f(A);
}
not show an array, A, being passed to f?
That's backwards compatibility with C array handling at play.
I'm not sure how this answers my question. Maybe you weren't
answering it and were just making a remark...
has nothing to do with backwards compatibility with C array
handling.
Les messages affichés proviennent d'usenet.