Re: constexpr keyword is unnecessary

Liste des GroupesRevenir à cl c  
Sujet : Re: constexpr keyword is unnecessary
De : thiago.adams (at) *nospam* gmail.com (Thiago Adams)
Groupes : comp.lang.c
Date : 19. Oct 2024, 23:49:58
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <vf1d2o$2hjk$1@dont-email.me>
References : 1 2 3 4 5 6
User-Agent : Mozilla Thunderbird
Em 10/19/2024 6:48 PM, Keith Thompson escreveu:
Thiago Adams <thiago.adams@gmail.com> writes:
Em 10/19/2024 1:03 PM, David Brown escreveu:
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?
>
I don't see any practical difference. In theory, the generated code
could be different, but I'm arguing that this doesn't really matter
and, consequently, it's not a good reason to differentiate between
const and constexpr.
 My reasons for not wanting `const int c = 2;` to make c a constant
expression have nothing to do with any theoretical difference in
generated code.
 My reason is that "const" and "constant" are two almost entirely
distinct concepts.  Conflating them makes the language more confusing.
Making the name of a "const" object a constant expression adds no new
capabilities beyone what we already have with "constexpr".
I see some differences but not enough to justify a new keyword and I think it also generates confusion. So it is a matter of choosing what that of confusion we want.
For instance, in file scope,
const int a = 1;
constexpr int b =1;
In both cases, because it is file scope, a and b need to be initialized with constant expressions. I don´t see anything more special in b compared with a to make any distinction.

 Though the C23 standard hasn't yet been officially released, it's too
late to make any substantive changes.  C23 *will* have constexpr, and
*will not* treat const-qualified objects as constants.
 
clang is already doing that (Allowing constant variable be used in compile time). But It may be removed it in the future.
and I understand constexpr is already inside the C23.

If I want a name for a constant expression of type int, I can (in C23)
use "constexpr", which clearly expresses that intent.  Using "const"
instead, in all versions of C up to and including C23, will result in
compile-time errors.
 Let's pretend that when "const" was introduced in C89, it was spelled
"readonly", which more closely reflects its meaning.  Would you suggest
that
      readonly int n = 42;
 should make n a constant expression?
 What you propose would make n a constant expression if and only if its
initializer is constant.
Yes, one of my points is that compilers will have to check whether the initializer is a constant expression anyway. constexpr isn’t helping the compiler or telling it something it doesn’t already know. It’s just telling the compiler to do something it likely would do anyway, even for local variables. So, the absence of constexpr is essentially telling the compiler to ignore something it already knows and preventing existing code from being handled at compile time
Consider:
const int c = 2;
int a = 0;
a = 1/(c-2);
The division by zero (c-2) will not be handled at compile time. Changing to:
constexpr int c = 2;
int a = 0;
a = 1/(c-2);
it will catch this even without flow analysis.
So, again, I don´t see a reason for not doing the same analysis using const or allowing const variables be used in constant expressions.

In C23, n is a constant expression if and only
if n is defined with "constexpr".  If you add "constexpr" to a
declaration whose initializer is not a constant expression, it will be
rejected.
It seems like an artificial limitation has been introduced instead of generalizing const.

Date Sujet#  Auteur
11 Oct 24 * constexpr keyword is unnecessary106Thiago Adams
11 Oct 24 +* Re: constexpr keyword is unnecessary25Bonita Montero
11 Oct 24 i`* Re: constexpr keyword is unnecessary24Thiago Adams
11 Oct 24 i `* Re: constexpr keyword is unnecessary23Bonita Montero
11 Oct 24 i  `* Re: constexpr keyword is unnecessary22Thiago Adams
12 Oct 24 i   +* Re: constexpr keyword is unnecessary16Bonita Montero
12 Oct 24 i   i`* Re: constexpr keyword is unnecessary15Thiago Adams
12 Oct 24 i   i `* Re: constexpr keyword is unnecessary14Bonita Montero
12 Oct 24 i   i  `* Re: constexpr keyword is unnecessary13Thiago Adams
13 Oct 24 i   i   `* Re: constexpr keyword is unnecessary12Bonita Montero
13 Oct 24 i   i    +* Re: constexpr keyword is unnecessary2Thiago Adams
13 Oct 24 i   i    i`- Re: constexpr keyword is unnecessary1Bonita Montero
15 Oct 24 i   i    `* Re: constexpr keyword is unnecessary9DFS
15 Oct 24 i   i     `* Re: constexpr keyword is unnecessary8Bonita Montero
15 Oct 24 i   i      `* Re: constexpr keyword is unnecessary7Bart
15 Oct 24 i   i       +* Re: constexpr keyword is unnecessary3Thiago Adams
15 Oct 24 i   i       i+- Re: constexpr keyword is unnecessary1Bonita Montero
16 Oct 24 i   i       i`- Re: constexpr keyword is unnecessary1Janis Papanagnou
15 Oct 24 i   i       `* Re: constexpr keyword is unnecessary3Kaz Kylheku
16 Oct 24 i   i        +- Re: constexpr keyword is unnecessary1Bonita Montero
16 Oct 24 i   i        `- Re: constexpr keyword is unnecessary1Janis Papanagnou
13 Oct 24 i   `* Re: constexpr keyword is unnecessary5Kaz Kylheku
13 Oct 24 i    `* Re: constexpr keyword is unnecessary4Thiago Adams
13 Oct 24 i     +- Re: constexpr keyword is unnecessary1Bonita Montero
13 Oct 24 i     `* Re: constexpr keyword is unnecessary2Kaz Kylheku
13 Oct 24 i      `- Re: constexpr keyword is unnecessary1Thiago Adams
12 Oct 24 +* Re: constexpr keyword is unnecessary21Bart
12 Oct 24 i`* Re: constexpr keyword is unnecessary20Thiago Adams
13 Oct 24 i `* Re: constexpr keyword is unnecessary19Bart
13 Oct 24 i  `* Re: constexpr keyword is unnecessary18Thiago Adams
13 Oct 24 i   `* Re: constexpr keyword is unnecessary17Bonita Montero
13 Oct 24 i    `* Re: constexpr keyword is unnecessary16Thiago Adams
13 Oct 24 i     +* Re: constexpr keyword is unnecessary11Bonita Montero
13 Oct 24 i     i`* Re: constexpr keyword is unnecessary10Thiago Adams
13 Oct 24 i     i `* Re: constexpr keyword is unnecessary9Bonita Montero
13 Oct 24 i     i  `* Re: constexpr keyword is unnecessary8Janis Papanagnou
13 Oct 24 i     i   `* Re: constexpr keyword is unnecessary7Bonita Montero
13 Oct 24 i     i    `* Re: constexpr keyword is unnecessary6Janis Papanagnou
13 Oct 24 i     i     `* Re: constexpr keyword is unnecessary5Bonita Montero
13 Oct 24 i     i      +* Re: constexpr keyword is unnecessary2Thiago Adams
13 Oct 24 i     i      i`- Re: constexpr keyword is unnecessary1Bonita Montero
13 Oct 24 i     i      `* Re: constexpr keyword is unnecessary2Janis Papanagnou
13 Oct 24 i     i       `- Re: constexpr keyword is unnecessary1Bonita Montero
13 Oct 24 i     `* Re: constexpr keyword is unnecessary4Michael S
13 Oct 24 i      `* Re: constexpr keyword is unnecessary3Thiago Adams
13 Oct 24 i       `* Re: constexpr keyword is unnecessary2Michael S
13 Oct 24 i        `- Re: constexpr keyword is unnecessary1Thiago Adams
19 Oct 24 `* Re: constexpr keyword is unnecessary59Keith Thompson
19 Oct 24  +- Re: constexpr keyword is unnecessary1Bonita Montero
19 Oct 24  `* Re: constexpr keyword is unnecessary57Thiago Adams
19 Oct 24   +* Re: constexpr keyword is unnecessary53David Brown
19 Oct 24   i+* Re: constexpr keyword is unnecessary9Bart
20 Oct 24   ii`* Re: constexpr keyword is unnecessary8David Brown
20 Oct 24   ii `* Re: constexpr keyword is unnecessary7Keith Thompson
21 Oct 24   ii  +- Re: constexpr keyword is unnecessary1Opus
21 Oct 24   ii  `* Re: constexpr keyword is unnecessary5David Brown
21 Oct 24   ii   `* Re: constexpr keyword is unnecessary4Keith Thompson
21 Oct 24   ii    `* Re: constexpr keyword is unnecessary3Chris M. Thomasson
22 Oct 24   ii     `* Re: constexpr keyword is unnecessary2Kaz Kylheku
22 Oct 24   ii      `- Re: constexpr keyword is unnecessary1Chris M. Thomasson
19 Oct 24   i+* Re: constexpr keyword is unnecessary40Thiago Adams
19 Oct 24   ii+* Re: constexpr keyword is unnecessary36Keith Thompson
20 Oct 24   iii+* Re: constexpr keyword is unnecessary33Thiago Adams
20 Oct 24   iiii`* Re: constexpr keyword is unnecessary32Keith Thompson
20 Oct 24   iiii +- Re: constexpr keyword is unnecessary1Michael S
20 Oct 24   iiii `* Re: constexpr keyword is unnecessary30Thiago Adams
22 Oct 24   iiii  `* Re: constexpr keyword is unnecessary29Bonita Montero
22 Oct 24   iiii   `* Re: constexpr keyword is unnecessary28Thiago Adams
26 Oct 24   iiii    `* Re: constexpr keyword is unnecessary27Vir Campestris
26 Oct 24   iiii     +* Re: constexpr keyword is unnecessary24James Kuyper
26 Oct 24   iiii     i+* Re: constexpr keyword is unnecessary6Janis Papanagnou
27 Oct 24   iiii     ii`* Re: constexpr keyword is unnecessary5Tim Rentsch
4 Nov 24   iiii     ii `* Re: constexpr keyword is unnecessary4Tim Rentsch
4 Nov 24   iiii     ii  `* Re: constexpr keyword is unnecessary3Lowell Gilbert
4 Nov 24   iiii     ii   +- Re: constexpr keyword is unnecessary1Kaz Kylheku
7 Nov 24   iiii     ii   `- Re: constexpr keyword is unnecessary1Tim Rentsch
27 Oct 24   iiii     i+* Re: constexpr keyword is unnecessary2Tim Rentsch
27 Oct 24   iiii     ii`- Re: constexpr keyword is unnecessary1David Brown
27 Oct 24   iiii     i+- Re: constexpr keyword is unnecessary1David Brown
28 Oct 24   iiii     i`* Re: constexpr keyword is unnecessary14Kaz Kylheku
28 Oct 24   iiii     i `* Re: constexpr keyword is unnecessary13Thiago Adams
29 Oct 24   iiii     i  +* Re: constexpr keyword is unnecessary10Kaz Kylheku
29 Oct 24   iiii     i  i+* Re: constexpr keyword is unnecessary8Thiago Adams
29 Oct 24   iiii     i  ii+* Re: constexpr keyword is unnecessary5Thiago Adams
29 Oct 24   iiii     i  iii`* Re: constexpr keyword is unnecessary4David Brown
29 Oct 24   iiii     i  iii +* Re: constexpr keyword is unnecessary2Thiago Adams
29 Oct 24   iiii     i  iii i`- Re: constexpr keyword is unnecessary1David Brown
30 Oct 24   iiii     i  iii `- Re: constexpr keyword is unnecessary1Janis Papanagnou
29 Oct 24   iiii     i  ii`* Re: constexpr keyword is unnecessary2Kaz Kylheku
5 Nov 24   iiii     i  ii `- Re: constexpr keyword is unnecessary1Tim Rentsch
5 Nov 24   iiii     i  i`- Re: constexpr keyword is unnecessary1Tim Rentsch
29 Oct 24   iiii     i  `* Re: constexpr keyword is unnecessary2Richard Harnden
29 Oct 24   iiii     i   `- Re: constexpr keyword is unnecessary1Thiago Adams
27 Oct 24   iiii     `* Re: constexpr keyword is unnecessary2Tim Rentsch
27 Oct 24   iiii      `- Re: constexpr keyword is unnecessary1David Brown
20 Oct 24   iii`* Re: constexpr keyword is unnecessary2Thiago Adams
20 Oct 24   iii `- Re: constexpr keyword is unnecessary1Bonita Montero
20 Oct 24   ii`* Re: constexpr keyword is unnecessary3David Brown
20 Oct 24   ii `* Re: constexpr keyword is unnecessary2Bart
20 Oct 24   ii  `- Re: constexpr keyword is unnecessary1David Brown
19 Oct 24   i`* Re: constexpr keyword is unnecessary3Keith Thompson
19 Oct 24   `* Re: constexpr keyword is unnecessary3Michael S

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal