Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.c > #161921
| From | Ben Bacarisse <ben.usenet@bsb.me.uk> |
|---|---|
| Newsgroups | comp.lang.c |
| Subject | Re: Array is an non-modifiable lvalue - where does it matter? |
| Date | 2021-07-15 22:12 +0100 |
| Organization | A noiseless patient Spider |
| Message-ID | <875yxbth6r.fsf@bsb.me.uk> (permalink) |
| References | <scq5c5$tql$1@dont-email.me> <5c1d96ea-c554-4aa1-b0db-a7729027ee04n@googlegroups.com> |
Öö Tiib <ootiib@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. Andrey is asking whether there are any situations where it matters that the standard excludes array-valued lvalues from being modifiable lvalues. Could that wording simply have been left out or would that permit something, not excluded by other wording, from being valid C? I *think* the answer is yes -- there would be no harm (other than maybe a loss of clarity) in removing that wording. But I had deliberately not answered because this is the sort of question that requires a more thorough knowledge of the standard than I possess to answer with any confidence. -- Ben.
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