Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.c > #161925
| From | David Brown <david.brown@hesbynett.no> |
|---|---|
| Newsgroups | comp.lang.c |
| Subject | Re: Array is an non-modifiable lvalue - where does it matter? |
| Date | 2021-07-16 09:52 +0200 |
| Organization | A noiseless patient Spider |
| Message-ID | <scrdrf$g4r$1@dont-email.me> (permalink) |
| References | <scq5c5$tql$1@dont-email.me> <5c1d96ea-c554-4aa1-b0db-a7729027ee04n@googlegroups.com> <875yxbth6r.fsf@bsb.me.uk> <e6132d4c-d915-492a-a76e-2d4a2062d353n@googlegroups.com> |
On 16/07/2021 00:07, Öö Tiib wrote: > On Friday, 16 July 2021 at 00:12:40 UTC+3, Ben Bacarisse wrote: >> Öö Tiib <oot...@hot.ee> writes: >> >>> On Thursday, 15 July 2021 at 23:21:37 UTC+3, Andrey Tarasevich wrote: >>>> 6.3.2/1 says that >>>> >>>> 1 [...] A modifiable lvalue is an lvalue that does not have array >>>> type, [...] >>>> >>>> Based on that, arrays are non-modifiable lvalues. We all know what it >>>> actually means. But is there any context in the standard in which this >>>> non-modifiability of array lvalues would actually _matter_, would >>>> actually interact with some other standard requirement? >>>> >>>> One thing that comes to mind is a constraint on assignment operators >>>> (6.5.16/2) >>>> >>>> 2 An assignment operator shall have a modifiable lvalue as its left >>>> operand. >>>> >>>> So, one can combine 6.3.2/1 and 6.5.16/2 and conclude that one can't >>>> assign to arrays. But I believe that constraints are intended/supposed >>>> to be applied after automatic implicit conversions. And since LHS of >>>> assignment is not one of the contexts excluded from array type decay, >>>> said decay is already sufficient to prevent assignment to arrays. >>>> >>>> Am I right here? Is the constraint of 6.5.16/2 supposed to be applied >>>> before automatic implicit conversions or after them? >>>> >>>> And if the answer is "after", then is there any other context in C >>>> standard where non-modifiability of array lvalues would make a difference? >>> >>> It is so that we can't modify address of array so >>> rest of operators that can modify lvalue like ++ or += also >>> will be rejected on case of an array. But I might misunderstand >>> what you are asking. >> >> Yes, you've missed the point of the question. Lvalue expressions of >> array type are, in almost all situations, converted to pointers to the >> first element of the array, and *the result is no longer an lvalue*. >> (The exceptions are the operands of &, sizeof and _Alignof and when a >> string literal is used to initialise an array.) >> >> Thus, given `int a[1]`, the expression `a++` is invalid because the >> operand is not an lvalue at all. > > Yes and so a = b is invalid because a turns into something that is > not lvalue at all. But saying that it is not modifiable does not hurt? > As far as I can tell (there are others here that are better than I at interpreting the exact wording of the standards), the wording in the standard has been misinterpreted here. The standard says "A modifiable lvalue is an lvalue that does not have array type". When applied to "a = b", this has been interpreted to mean that "a" is an lvalue of array type and therefore a non-modifiable lvalue, so you cannot use the assignment. This is, AFAICS, subtly incorrect - used here, "a" is converted to a non-lvalue pointer to its first element. It is not an lvalue at all, modifiable or non-modifiable.
Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Array is an non-modifiable lvalue - where does it matter? Andrey Tarasevich <andreytarasevich@hotmail.com> - 2021-07-15 13:21 -0700
Re: Array is an non-modifiable lvalue - where does it matter? Öö Tiib <ootiib@hot.ee> - 2021-07-15 13:55 -0700
Re: Array is an non-modifiable lvalue - where does it matter? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-07-15 22:12 +0100
Re: Array is an non-modifiable lvalue - where does it matter? Öö Tiib <ootiib@hot.ee> - 2021-07-15 15:07 -0700
Re: Array is an non-modifiable lvalue - where does it matter? David Brown <david.brown@hesbynett.no> - 2021-07-16 09:52 +0200
Re: Array is an non-modifiable lvalue - where does it matter? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-07-16 02:31 -0700
Re: Array is an non-modifiable lvalue - where does it matter? Andrey Tarasevich <andreytarasevich@hotmail.com> - 2021-07-16 10:59 -0700
Re: Array is an non-modifiable lvalue - where does it matter? David Brown <david.brown@hesbynett.no> - 2021-07-17 16:23 +0200
Re: Array is an non-modifiable lvalue - where does it matter? James Kuyper <jameskuyper@alumni.caltech.edu> - 2021-07-17 20:14 -0400
Re: Array is an non-modifiable lvalue - where does it matter? Andrey Tarasevich <andreytarasevich@hotmail.com> - 2021-07-15 14:36 -0700
Re: Array is an non-modifiable lvalue - where does it matter? Öö Tiib <ootiib@hot.ee> - 2021-07-15 15:19 -0700
Re: Array is an non-modifiable lvalue - where does it matter? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-07-15 14:06 -0700
Re: Array is an non-modifiable lvalue - where does it matter? James Kuyper <jameskuyper@alumni.caltech.edu> - 2021-07-16 14:22 -0400
Re: Array is an non-modifiable lvalue - where does it matter? Andrey Tarasevich <andreytarasevich@hotmail.com> - 2021-07-16 11:43 -0700
Re: Array is an non-modifiable lvalue - where does it matter? Andrey Tarasevich <andreytarasevich@hotmail.com> - 2021-07-17 18:24 -0700
Re: Array is an non-modifiable lvalue - where does it matter? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-07-17 20:29 -0700
Re: Array is an non-modifiable lvalue - where does it matter? Siri Cruise <chine.bleu@yahoo.com> - 2021-07-17 21:25 -0700
Re: Array is an non-modifiable lvalue - where does it matter? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-07-16 15:22 -0700
Re: Array is an non-modifiable lvalue - where does it matter? Kaz Kylheku <563-365-8930@kylheku.com> - 2021-07-16 22:21 +0000
Re: Array is an non-modifiable lvalue - where does it matter? Andrey Tarasevich <andreytarasevich@hotmail.com> - 2021-07-16 23:27 -0700
Re: Array is an non-modifiable lvalue - where does it matter? Kaz Kylheku <563-365-8930@kylheku.com> - 2021-07-17 16:53 +0000
Re: Array is an non-modifiable lvalue - where does it matter? Andrey Tarasevich <andreytarasevich@hotmail.com> - 2021-07-17 10:49 -0700
Re: Array is an non-modifiable lvalue - where does it matter? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-07-17 14:01 -0700
Re: Array is an non-modifiable lvalue - where does it matter? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-07-18 02:09 +0100
Re: Array is an non-modifiable lvalue - where does it matter? James Kuyper <jameskuyper@alumni.caltech.edu> - 2021-07-17 20:12 -0400
Re: Array is an non-modifiable lvalue - where does it matter? "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> - 2021-07-17 13:20 -0700
Re: Array is an non-modifiable lvalue - where does it matter? Andrey Tarasevich <andreytarasevich@hotmail.com> - 2021-07-19 14:44 -0700
Re: Array is an non-modifiable lvalue - where does it matter? "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> - 2021-07-23 23:26 -0700
csiph-web