| Deutsch English Français Italiano |
|
<8734krrdkh.fsf@nosuchdomain.example.com> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!weretis.net!feeder8.news.weretis.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: Keith Thompson <Keith.S.Thompson+u@gmail.com>
Newsgroups: comp.lang.c
Subject: Re: constexpr keyword is unnecessary
Date: Sat, 19 Oct 2024 14:24:30 -0700
Organization: None to speak of
Lines: 54
Message-ID: <8734krrdkh.fsf@nosuchdomain.example.com>
References: <veb5fi$3ll7j$1@dont-email.me>
<877ca5q84u.fsf@nosuchdomain.example.com>
<vf0ijd$3u54q$1@dont-email.me> <vf0l98$3un4n$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain
Injection-Date: Sat, 19 Oct 2024 23:24:30 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="4632646bb00bcda06c245f19eb191951";
logging-data="46837"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19zVEnpdnq/hKmewMMa6B58"
User-Agent: Gnus/5.13 (Gnus v5.13)
Cancel-Lock: sha1:R4HEDjE5RanMdegBWb923bZZLZA=
sha1:LB/1M3DELnZPqm5BS+U/XiNgE1Q=
Bytes: 3224
David Brown <david.brown@hesbynett.no> writes:
> On 19/10/2024 17:18, Thiago Adams wrote:
>> Em 10/18/2024 8:54 PM, Keith Thompson escreveu:
>>> Thiago Adams <thiago.adams@gmail.com> writes:
>>>> I think constexpr keyword is unnecessary.
>>>
>>> Sure, most language features are strictly unnecessary.
>>>
>>>> Anything you do with it could/should be done with const.
>>>
>>> No, absolutely not.
>>>
>> If not, do you have a sample where, using "const" as "constexpr",
>> would create problems?
>> The sample I know is VLA.
>> const int c = 2;
>> int a[c]; //a is VLA because c is not a constant expression.
>> But this is not enough to convince me because it is better not to be
>> a VLA here.
>>
>
> What practical difference would it make? Can you think of any
> difference between local variables "a" and "b" defined like this?
>
> enum { n = 2 };
> const int c = n;
> int a[c];
> int b[n];
>
> Can you show any situation where you could use "a" and not "b", or
> vice versa, or where the meaning would be different? Can you show any
> compiler that treats them differently in code generation (assuming a
> compiler that supports enough of C99 to allow it)?
>
> I know of no differences there. That is enough to convince me that it
> doesn't matter in the slightest whether it is technically a VLA or
> not.
VLAs are optional in C11 and later. A conforming implementation that
doesn't support VLAs will accept `int b[n];` and reject `int a[c];`.
`sizeof a` is not a constant expression, so it can't be used in a case
label or any other context that requires a constant expression. (If
`const int c = n;` made c a constant expression, this would not apply.)
Generated code for constructs that a compiler acccepts is likely to be
identical. For a VLA type with a non-constant length, the compiler must
implicitly store the size somehow. For a VLA type with a length that
the compiler can evaluate at compile time, the compiler is likely to
generate code equivalent to that for a non-VLA.
--
Keith Thompson (The_Other_Keith) Keith.S.Thompson+u@gmail.com
void Void(void) { Void(); } /* The recursive call of the void */