Path: ...!news.mixmin.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: Tim Rentsch
Newsgroups: comp.lang.c
Subject: Re: technology discussion =?utf-8?Q?=E2=86=92?= does the world need
a "new" C ?
Date: Sun, 18 Aug 2024 18:03:41 -0700
Organization: A noiseless patient Spider
Lines: 64
Message-ID: <865xrxe32q.fsf@linuxsc.com>
References: <20240712154252.00005c2f@yahoo.com> <86o7717jj1.fsf@linuxsc.com> <20240717163457.000067bb@yahoo.com> <86a5hep45h.fsf@linuxsc.com> <87y14xsvnh.fsf@bsb.me.uk> <87sev5s51s.fsf@bsb.me.uk> <87jzggss6h.fsf@bsb.me.uk> <8734n1s7z8.fsf@bsb.me.uk>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Injection-Date: Mon, 19 Aug 2024 03:03:41 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="8e0243d997a628e731b4ff9e397b6328";
logging-data="2717539"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19oA20/5QbdoasLYkpGlbQTyXRpNu1CN4o="
User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.4 (gnu/linux)
Cancel-Lock: sha1:fxMG7MimHqzItDauBsKnFq1OIFo=
sha1:5rXsHkMBCfJaS7eAf4Ylvtn5iAI=
Bytes: 4005
Ben Bacarisse writes:
> David Brown writes:
>
>> On 16/08/2024 12:00, Ben Bacarisse wrote:
>>
>>> David Brown writes:
>>>
>>>> On 16/08/2024 02:08, Ben Bacarisse wrote:
>>>>
>>>>> Bart 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
>>> 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
>>> 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...
My guess is he didn't understand the question. The code shown
has nothing to do with backwards compatibility with C array
handling.