Deutsch English Français Italiano |
<8734n1s7z8.fsf@bsb.me.uk> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Ben Bacarisse <ben@bsb.me.uk> Newsgroups: comp.lang.c Subject: Re: technology discussion =?utf-8?Q?=E2=86=92?= does the world need a "new" C ? Date: Mon, 19 Aug 2024 00:54:03 +0100 Organization: A noiseless patient Spider Lines: 56 Message-ID: <8734n1s7z8.fsf@bsb.me.uk> References: <v66eci$2qeee$1@dont-email.me> <v6oct4$2djgq$2@dont-email.me> <v6of96$2ekb0$1@dont-email.me> <v6ovfc$2hcpf$1@dont-email.me> <v6p4hf$2icph$1@dont-email.me> <v6qgpu$2t6p7$3@dont-email.me> <v6r33m$30grj$1@dont-email.me> <20240712154252.00005c2f@yahoo.com> <86o7717jj1.fsf@linuxsc.com> <v6ti10$3gru4$1@dont-email.me> <v78af7$1qkuf$1@dont-email.me> <20240717163457.000067bb@yahoo.com> <v78piu$1su4u$1@dont-email.me> <86a5hep45h.fsf@linuxsc.com> <v9ktep$v5sk$1@dont-email.me> <87y14xsvnh.fsf@bsb.me.uk> <v9l95b$10ogv$1@dont-email.me> <87sev5s51s.fsf@bsb.me.uk> <v9n6uj$1cvvg$2@dont-email.me> <87jzggss6h.fsf@bsb.me.uk> <v9nns5$1f74j$1@dont-email.me> MIME-Version: 1.0 Content-Type: text/plain Injection-Date: Mon, 19 Aug 2024 01:54:03 +0200 (CEST) Injection-Info: dont-email.me; posting-host="153c0803c54c022691c586705843dea6"; logging-data="2706798"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/6pmgfkYNPWKafaSixj6GIC7L658Od4lE=" User-Agent: Gnus/5.13 (Gnus v5.13) Cancel-Lock: sha1:GeQKX89aIgohaGM7JreWXn5Sfo0= sha1:blC8tqiI4AEqYh2/jSFpvCXfNKE= X-BSB-Auth: 1.46e24e9eb2811020452c.20240819005403BST.8734n1s7z8.fsf@bsb.me.uk Bytes: 3789 David Brown <david.brown@hesbynett.no> writes: > 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... -- Ben.