Deutsch   English   Français   Italiano  
<vf0ps2$3vf16$1@dont-email.me>

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: Bart <bc@freeuk.com>
Newsgroups: comp.lang.c
Subject: Re: constexpr keyword is unnecessary
Date: Sat, 19 Oct 2024 18:22:11 +0100
Organization: A noiseless patient Spider
Lines: 57
Message-ID: <vf0ps2$3vf16$1@dont-email.me>
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; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Date: Sat, 19 Oct 2024 19:22:11 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="4a5eb92c73009548f1b85fbbb31f3f99";
	logging-data="4176934"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX1+fo0HNCjJmpoK01NnDlUQG"
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:vJ4+EPHgMRlEn+zlqml9D8oTW80=
Content-Language: en-GB
In-Reply-To: <vf0l98$3un4n$1@dont-email.me>
Bytes: 3152

On 19/10/2024 17:03, David Brown wrote:
> 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.

I can give examples where a compiler won't work, or it will generate 
different code, but you won't execpt it because you won't recognise the 
compiler, or will dismiss it, or will dismiss even gcc because 
optimisations aren't used.

If it will always be gcc-O2 or higher, and it is an example just like 
these (so inside a function), then probably it will generate the same code.

But that's a lot of 'if's.

Where the code is different, then gcc on Windows for example likes to 
generate a call to __chkstack() (to incrementally increase the stack a 
page at a time in case it skips a page for a large allocation).