<complement>
... laquelle adresse est une *valeur* valide pour une variable de type
pointeur sur int.
</complement>
<complement>
... laquelle adresse est une *valeur* valide pour une variable de type
pointeur sur int.
</complement>
<complement>
... laquelle adresse est une *valeur* valide pour une variable de type
pointeur sur int.
</complement>
1 est il un int ?
On ne peut pas comparer un type et une valeur.
C'était bien le sens de ma remarque.1 est une expression constante de type int.
Et surtout, ça n'est pas un objet, ni une variable donc.
'expression constante', ça ne te suffit pas ?
1 est il un int ?
On ne peut pas comparer un type et une valeur.
C'était bien le sens de ma remarque.
1 est une expression constante de type int.
Et surtout, ça n'est pas un objet, ni une variable donc.
'expression constante', ça ne te suffit pas ?
1 est il un int ?
On ne peut pas comparer un type et une valeur.
C'était bien le sens de ma remarque.1 est une expression constante de type int.
Et surtout, ça n'est pas un objet, ni une variable donc.
'expression constante', ça ne te suffit pas ?
Aurais-tu un exemple d'identificateurs différents d'un même objet ?
Aurais-tu un exemple d'identificateurs différents d'un même objet ?
Aurais-tu un exemple d'identificateurs différents d'un même objet ?
Question aux gurus: il me semble évident qu'à partir du moment où
une variable est déclarée, et durant toute sa vie, l'opérateur
adresse renverra toujours la même valeur. Vous confirmez ?
Question aux gurus: il me semble évident qu'à partir du moment où
une variable est déclarée, et durant toute sa vie, l'opérateur
adresse renverra toujours la même valeur. Vous confirmez ?
Question aux gurus: il me semble évident qu'à partir du moment où
une variable est déclarée, et durant toute sa vie, l'opérateur
adresse renverra toujours la même valeur. Vous confirmez ?
Question aux gurus: il me semble évident qu'à partir du moment où une
variable est déclarée, et durant toute sa vie, l'opérateur adresse
renverra toujours la même valeur. Vous confirmez ?
Question aux gurus: il me semble évident qu'à partir du moment où une
variable est déclarée, et durant toute sa vie, l'opérateur adresse
renverra toujours la même valeur. Vous confirmez ?
Question aux gurus: il me semble évident qu'à partir du moment où une
variable est déclarée, et durant toute sa vie, l'opérateur adresse
renverra toujours la même valeur. Vous confirmez ?
En news:, Pierre Maurette va escriure:Question aux gurus: il me semble évident qu'à partir du moment où une
variable est déclarée, et durant toute sa vie, l'opérateur adresse
renverra toujours la même valeur. Vous confirmez ?
Mettons de côté le fait qu'une variable (un seul objet) peut avoir plusieurs
déclarations, voire même parfois plusieurs définitions (cf. ma réponse à
Yoxoman).
Définis d'abord « même »...
En news:mn.fa2e7d634c6a755e.31483@laposte.net, Pierre Maurette va escriure:
Question aux gurus: il me semble évident qu'à partir du moment où une
variable est déclarée, et durant toute sa vie, l'opérateur adresse
renverra toujours la même valeur. Vous confirmez ?
Mettons de côté le fait qu'une variable (un seul objet) peut avoir plusieurs
déclarations, voire même parfois plusieurs définitions (cf. ma réponse à
Yoxoman).
Définis d'abord « même »...
En news:, Pierre Maurette va escriure:Question aux gurus: il me semble évident qu'à partir du moment où une
variable est déclarée, et durant toute sa vie, l'opérateur adresse
renverra toujours la même valeur. Vous confirmez ?
Mettons de côté le fait qu'une variable (un seul objet) peut avoir plusieurs
déclarations, voire même parfois plusieurs définitions (cf. ma réponse à
Yoxoman).
Définis d'abord « même »...
Là, c'est moi qui ne comprend plus rien. Dans le premier cas, p pointe
vers un entier, non ? Tu as bien écrit "int* p", ou c'est mes yeux ? :)
Oui, mais l'entier et le tableau ont la même adresse.
C'est la notion de 'pointe sur' qui n'est pas claire.
Dans le premier cas, *p est de type
int, dans l'autre, il est de type int[4].
Oui, modulo 64. Ce que je dis, c'est que *p a une *valeur* (rvalue) de
type pointeur vers int.
Bof... A ce rythme là, il a aussi une valeur de type char*
(modulo sizeof(int)).
Oui, mais je dois mal m'exprimer. L'exception d'opérateurs dont je
parle, c'est celle mentionnée dans la faq (via le lien que je t'ai
donné).
Je ne t'accuse absolument pas de ne pas comprendre. Ce que je
dis, c'est que la phrase cité initiallement permet de comprendre
"un peu" ce qui se passe. Mais qu'elle est imprécise.
*p est de type array-to-T.
typedef int Tab64[64];
Tab64 a;
int* pi= a;
Trab64* pt= &a;
pi est de type pointer-to-int
*pi est de type int
pt est de type pointer-to-array-to-T
*pt est de type array-to-T
Ce dont je parlait ici, c'est des énoncés du type « Whenever we use the
name of an array as a value, that name represents a pointer to the
initial element of the array. » (Accelerated C++).
Sauf avec sizeof et &.
Pour moi, pointeur est un type. Ou plutôt un ensemble de types (pointeur
vers T). Je considère « un pointeur » comme synonyme de « une
expression de type pointeur ». Et une rvalue est une expression...
Faut faire attention avec ces raccourcis. Car alors 1 est un int,
et 0.0 un double.
Ce singulier-pluriel (*la* valeur ; *ses* cases) peut-il avoir un sens ?
Ou alors la valeur de l'ensemble de ses cases ? Mais je ne sais pas ce
que c'est.
La valeur de l'ensemble de ses cases ? Tu ne vois pas ce que c'est ?
La norme C ne parle pas de rvalue. En note de bas de la page 46, on peut
lire : « What is sometimes called ??rvalue?? is in this International
Standard described as the ??value of an expression??. ».
On lit également (§3.17/1): « value : precise meaning of the contents of
an object when interpreted as having a specific type. ». Mais la norme
du C ne définit pas la « valeur » d'un tableau.
Pourtant, il faut bien donner une sémantique à
struct {
char tab[7];
double d;
} x , y= { "toto", 0.O } ;
x= y;
Je suis pas expert en recherche dans la norme, mais 6.5.16.1/1 définit
bien l'affectation comme le remplacement de 'value'. Donc, il faut
définir 'value' pour x et y. Et je ne vois pas comment faire sans
parler de 'value' pour tab.Pour la norme C :
- Pour les lvalue qui ne sont pas de type tableau, on a une « valeur
contenue », synonyme de « valeur ». Pour les lvalue de type tableau, on
a une autre conversion, et on s'abstient de parler de valeur.
Et comment on exprime l'affectation entre tableaux dans des structures ?
Là, c'est moi qui ne comprend plus rien. Dans le premier cas, p pointe
vers un entier, non ? Tu as bien écrit "int* p", ou c'est mes yeux ? :)
Oui, mais l'entier et le tableau ont la même adresse.
C'est la notion de 'pointe sur' qui n'est pas claire.
Dans le premier cas, *p est de type
int, dans l'autre, il est de type int[4].
Oui, modulo 64. Ce que je dis, c'est que *p a une *valeur* (rvalue) de
type pointeur vers int.
Bof... A ce rythme là, il a aussi une valeur de type char*
(modulo sizeof(int)).
Oui, mais je dois mal m'exprimer. L'exception d'opérateurs dont je
parle, c'est celle mentionnée dans la faq (via le lien que je t'ai
donné).
Je ne t'accuse absolument pas de ne pas comprendre. Ce que je
dis, c'est que la phrase cité initiallement permet de comprendre
"un peu" ce qui se passe. Mais qu'elle est imprécise.
*p est de type array-to-T.
typedef int Tab64[64];
Tab64 a;
int* pi= a;
Trab64* pt= &a;
pi est de type pointer-to-int
*pi est de type int
pt est de type pointer-to-array-to-T
*pt est de type array-to-T
Ce dont je parlait ici, c'est des énoncés du type « Whenever we use the
name of an array as a value, that name represents a pointer to the
initial element of the array. » (Accelerated C++).
Sauf avec sizeof et &.
Pour moi, pointeur est un type. Ou plutôt un ensemble de types (pointeur
vers T). Je considère « un pointeur » comme synonyme de « une
expression de type pointeur ». Et une rvalue est une expression...
Faut faire attention avec ces raccourcis. Car alors 1 est un int,
et 0.0 un double.
Ce singulier-pluriel (*la* valeur ; *ses* cases) peut-il avoir un sens ?
Ou alors la valeur de l'ensemble de ses cases ? Mais je ne sais pas ce
que c'est.
La valeur de l'ensemble de ses cases ? Tu ne vois pas ce que c'est ?
La norme C ne parle pas de rvalue. En note de bas de la page 46, on peut
lire : « What is sometimes called ??rvalue?? is in this International
Standard described as the ??value of an expression??. ».
On lit également (§3.17/1): « value : precise meaning of the contents of
an object when interpreted as having a specific type. ». Mais la norme
du C ne définit pas la « valeur » d'un tableau.
Pourtant, il faut bien donner une sémantique à
struct {
char tab[7];
double d;
} x , y= { "toto", 0.O } ;
x= y;
Je suis pas expert en recherche dans la norme, mais 6.5.16.1/1 définit
bien l'affectation comme le remplacement de 'value'. Donc, il faut
définir 'value' pour x et y. Et je ne vois pas comment faire sans
parler de 'value' pour tab.
Pour la norme C :
- Pour les lvalue qui ne sont pas de type tableau, on a une « valeur
contenue », synonyme de « valeur ». Pour les lvalue de type tableau, on
a une autre conversion, et on s'abstient de parler de valeur.
Et comment on exprime l'affectation entre tableaux dans des structures ?
Là, c'est moi qui ne comprend plus rien. Dans le premier cas, p pointe
vers un entier, non ? Tu as bien écrit "int* p", ou c'est mes yeux ? :)
Oui, mais l'entier et le tableau ont la même adresse.
C'est la notion de 'pointe sur' qui n'est pas claire.
Dans le premier cas, *p est de type
int, dans l'autre, il est de type int[4].
Oui, modulo 64. Ce que je dis, c'est que *p a une *valeur* (rvalue) de
type pointeur vers int.
Bof... A ce rythme là, il a aussi une valeur de type char*
(modulo sizeof(int)).
Oui, mais je dois mal m'exprimer. L'exception d'opérateurs dont je
parle, c'est celle mentionnée dans la faq (via le lien que je t'ai
donné).
Je ne t'accuse absolument pas de ne pas comprendre. Ce que je
dis, c'est que la phrase cité initiallement permet de comprendre
"un peu" ce qui se passe. Mais qu'elle est imprécise.
*p est de type array-to-T.
typedef int Tab64[64];
Tab64 a;
int* pi= a;
Trab64* pt= &a;
pi est de type pointer-to-int
*pi est de type int
pt est de type pointer-to-array-to-T
*pt est de type array-to-T
Ce dont je parlait ici, c'est des énoncés du type « Whenever we use the
name of an array as a value, that name represents a pointer to the
initial element of the array. » (Accelerated C++).
Sauf avec sizeof et &.
Pour moi, pointeur est un type. Ou plutôt un ensemble de types (pointeur
vers T). Je considère « un pointeur » comme synonyme de « une
expression de type pointeur ». Et une rvalue est une expression...
Faut faire attention avec ces raccourcis. Car alors 1 est un int,
et 0.0 un double.
Ce singulier-pluriel (*la* valeur ; *ses* cases) peut-il avoir un sens ?
Ou alors la valeur de l'ensemble de ses cases ? Mais je ne sais pas ce
que c'est.
La valeur de l'ensemble de ses cases ? Tu ne vois pas ce que c'est ?
La norme C ne parle pas de rvalue. En note de bas de la page 46, on peut
lire : « What is sometimes called ??rvalue?? is in this International
Standard described as the ??value of an expression??. ».
On lit également (§3.17/1): « value : precise meaning of the contents of
an object when interpreted as having a specific type. ». Mais la norme
du C ne définit pas la « valeur » d'un tableau.
Pourtant, il faut bien donner une sémantique à
struct {
char tab[7];
double d;
} x , y= { "toto", 0.O } ;
x= y;
Je suis pas expert en recherche dans la norme, mais 6.5.16.1/1 définit
bien l'affectation comme le remplacement de 'value'. Donc, il faut
définir 'value' pour x et y. Et je ne vois pas comment faire sans
parler de 'value' pour tab.Pour la norme C :
- Pour les lvalue qui ne sont pas de type tableau, on a une « valeur
contenue », synonyme de « valeur ». Pour les lvalue de type tableau, on
a une autre conversion, et on s'abstient de parler de valeur.
Et comment on exprime l'affectation entre tableaux dans des structures ?
Question aux gurus: il me semble évident qu'à partir du moment où une
variable est déclarée, et durant toute sa vie, l'opérateur adresse
renverra toujours la même valeur. Vous confirmez ?
Question aux gurus: il me semble évident qu'à partir du moment où une
variable est déclarée, et durant toute sa vie, l'opérateur adresse
renverra toujours la même valeur. Vous confirmez ?
Question aux gurus: il me semble évident qu'à partir du moment où une
variable est déclarée, et durant toute sa vie, l'opérateur adresse
renverra toujours la même valeur. Vous confirmez ?
int a;
int *p = NULL;
p = &a;
Mais &a n'est-il un pointeur ?
&a est-il modifiable ? Non. C'est donc une adresse, pas un pointeur.
int a;
int *p = NULL;
p = &a;
Mais &a n'est-il un pointeur ?
&a est-il modifiable ? Non. C'est donc une adresse, pas un pointeur.
int a;
int *p = NULL;
p = &a;
Mais &a n'est-il un pointeur ?
&a est-il modifiable ? Non. C'est donc une adresse, pas un pointeur.
Là, c'est moi qui ne comprend plus rien. Dans le premier cas, p pointe
vers un entier, non ? Tu as bien écrit "int* p", ou c'est mes yeux ? :)
Oui, mais l'entier et le tableau ont la même adresse.
C'est la notion de 'pointe sur' qui n'est pas claire.
Je comprends. Comme je l'ai dit, pour moi « pointeur » est un type. Donc
« p pointe vers un tableau » sous-entend « p est une expression de type
pointeur vers tableau ».
Et pour en revenir à la phrase originale, « la valeur d'un tableau est
un pointeur vers son premier élément » serait formellement « la rvalue
d'une expression de type tableau est une expression de type "pointeur
vers le type du premier élément du tableau", et qui représente l'adresse
(ou le pointeur) du premier élément du tableau ». Ca fait beaucoup de
raccourcis, certes. Mais la question principale des raccourcis
linguistiques n'est-elle pas de savoir si ceux-ci peuvent avoir un sens
erroné ? Et je ne vois pas trop comment on pourrait interpreter celui-là
différemment de sa version formelle.
Dans le premier cas, *p est de type
int, dans l'autre, il est de type int[4].
Oui, modulo 64. Ce que je dis, c'est que *p a une *valeur* (rvalue) de
type pointeur vers int.
Bof... A ce rythme là, il a aussi une valeur de type char*
(modulo sizeof(int)).
Comprends pas.
*p est de type array-to-T.
typedef int Tab64[64];
Tab64 a;
int* pi= a;
Trab64* pt= &a;
pi est de type pointer-to-int
*pi est de type int
pt est de type pointer-to-array-to-T
*pt est de type array-to-T
Oui. Et ?
Ce dont je parlait ici, c'est des énoncés du type « Whenever we use the
name of an array as a value, that name represents a pointer to the
initial element of the array. » (Accelerated C++).
Sauf avec sizeof et &.
Non. Tout est dans le « as a value ».
Pour moi, pointeur est un type. Ou plutôt un ensemble de types (pointeur
vers T). Je considère « un pointeur » comme synonyme de « une
expression de type pointeur ». Et une rvalue est une expression...
Faut faire attention avec ces raccourcis. Car alors 1 est un int,
et 0.0 un double.
Sans réserve, je dis oui. Même si toi ou ED n'êtes pas d'accord. « 1 est
un int » dans le sens « 1 est une expression (constante) de type int (ou
entier) ». Tout comme
double d; // d est un double
int* p; // p est un pointeur
et qu'une 306, c'est une Peugeot.
Ce singulier-pluriel (*la* valeur ; *ses* cases) peut-il avoir un sens ?
Ou alors la valeur de l'ensemble de ses cases ? Mais je ne sais pas ce
que c'est.
La valeur de l'ensemble de ses cases ? Tu ne vois pas ce que c'est ?
Hmm. Si. Finalement. Comme quoi.
La norme C ne parle pas de rvalue. En note de bas de la page 46, on peut
lire : « What is sometimes called ??rvalue?? is in this International
Standard described as the ??value of an expression??. ».
On lit également (§3.17/1): « value : precise meaning of the contents of
an object when interpreted as having a specific type. ». Mais la norme
du C ne définit pas la « valeur » d'un tableau.
Pourtant, il faut bien donner une sémantique à
struct {
char tab[7];
double d;
} x , y= { "toto", 0.O } ;
x= y;
Je suis pas expert en recherche dans la norme, mais 6.5.16.1/1 définit
bien l'affectation comme le remplacement de 'value'. Donc, il faut
définir 'value' pour x et y. Et je ne vois pas comment faire sans
parler de 'value' pour tab.Pour la norme C :
- Pour les lvalue qui ne sont pas de type tableau, on a une « valeur
contenue », synonyme de « valeur ». Pour les lvalue de type tableau, on
a une autre conversion, et on s'abstient de parler de valeur.
Et comment on exprime l'affectation entre tableaux dans des structures ?
Tu as raison. Je ne sais pas.
Donc, si tu es d'accord, on a
- pour le C, une notion de « rvalue » synonyme de « valeur », une «
valeur » synonyme de « valeur contenue », et un contexte (implicite,
certes) de valeur pour un tableau. Conclusion : la rvalue d'un tableau
existe et est son contenu (avec sens).
- pour le C++, une notion de « rvalue » définie pour un tableau : c'est
un pointeur (ou appelle le comme tu veux) vers son premier élément.
Donc C et C++ ont des définitions différentes de rvalue pour les
tableaux. C'est triste.
Bon... Outre le fait que je me découpe les cheveux en quatre, suis-je en
train de raconter des conneries ?
Là, c'est moi qui ne comprend plus rien. Dans le premier cas, p pointe
vers un entier, non ? Tu as bien écrit "int* p", ou c'est mes yeux ? :)
Oui, mais l'entier et le tableau ont la même adresse.
C'est la notion de 'pointe sur' qui n'est pas claire.
Je comprends. Comme je l'ai dit, pour moi « pointeur » est un type. Donc
« p pointe vers un tableau » sous-entend « p est une expression de type
pointeur vers tableau ».
Et pour en revenir à la phrase originale, « la valeur d'un tableau est
un pointeur vers son premier élément » serait formellement « la rvalue
d'une expression de type tableau est une expression de type "pointeur
vers le type du premier élément du tableau", et qui représente l'adresse
(ou le pointeur) du premier élément du tableau ». Ca fait beaucoup de
raccourcis, certes. Mais la question principale des raccourcis
linguistiques n'est-elle pas de savoir si ceux-ci peuvent avoir un sens
erroné ? Et je ne vois pas trop comment on pourrait interpreter celui-là
différemment de sa version formelle.
Dans le premier cas, *p est de type
int, dans l'autre, il est de type int[4].
Oui, modulo 64. Ce que je dis, c'est que *p a une *valeur* (rvalue) de
type pointeur vers int.
Bof... A ce rythme là, il a aussi une valeur de type char*
(modulo sizeof(int)).
Comprends pas.
*p est de type array-to-T.
typedef int Tab64[64];
Tab64 a;
int* pi= a;
Trab64* pt= &a;
pi est de type pointer-to-int
*pi est de type int
pt est de type pointer-to-array-to-T
*pt est de type array-to-T
Oui. Et ?
Ce dont je parlait ici, c'est des énoncés du type « Whenever we use the
name of an array as a value, that name represents a pointer to the
initial element of the array. » (Accelerated C++).
Sauf avec sizeof et &.
Non. Tout est dans le « as a value ».
Pour moi, pointeur est un type. Ou plutôt un ensemble de types (pointeur
vers T). Je considère « un pointeur » comme synonyme de « une
expression de type pointeur ». Et une rvalue est une expression...
Faut faire attention avec ces raccourcis. Car alors 1 est un int,
et 0.0 un double.
Sans réserve, je dis oui. Même si toi ou ED n'êtes pas d'accord. « 1 est
un int » dans le sens « 1 est une expression (constante) de type int (ou
entier) ». Tout comme
double d; // d est un double
int* p; // p est un pointeur
et qu'une 306, c'est une Peugeot.
Ce singulier-pluriel (*la* valeur ; *ses* cases) peut-il avoir un sens ?
Ou alors la valeur de l'ensemble de ses cases ? Mais je ne sais pas ce
que c'est.
La valeur de l'ensemble de ses cases ? Tu ne vois pas ce que c'est ?
Hmm. Si. Finalement. Comme quoi.
La norme C ne parle pas de rvalue. En note de bas de la page 46, on peut
lire : « What is sometimes called ??rvalue?? is in this International
Standard described as the ??value of an expression??. ».
On lit également (§3.17/1): « value : precise meaning of the contents of
an object when interpreted as having a specific type. ». Mais la norme
du C ne définit pas la « valeur » d'un tableau.
Pourtant, il faut bien donner une sémantique à
struct {
char tab[7];
double d;
} x , y= { "toto", 0.O } ;
x= y;
Je suis pas expert en recherche dans la norme, mais 6.5.16.1/1 définit
bien l'affectation comme le remplacement de 'value'. Donc, il faut
définir 'value' pour x et y. Et je ne vois pas comment faire sans
parler de 'value' pour tab.
Pour la norme C :
- Pour les lvalue qui ne sont pas de type tableau, on a une « valeur
contenue », synonyme de « valeur ». Pour les lvalue de type tableau, on
a une autre conversion, et on s'abstient de parler de valeur.
Et comment on exprime l'affectation entre tableaux dans des structures ?
Tu as raison. Je ne sais pas.
Donc, si tu es d'accord, on a
- pour le C, une notion de « rvalue » synonyme de « valeur », une «
valeur » synonyme de « valeur contenue », et un contexte (implicite,
certes) de valeur pour un tableau. Conclusion : la rvalue d'un tableau
existe et est son contenu (avec sens).
- pour le C++, une notion de « rvalue » définie pour un tableau : c'est
un pointeur (ou appelle le comme tu veux) vers son premier élément.
Donc C et C++ ont des définitions différentes de rvalue pour les
tableaux. C'est triste.
Bon... Outre le fait que je me découpe les cheveux en quatre, suis-je en
train de raconter des conneries ?
Là, c'est moi qui ne comprend plus rien. Dans le premier cas, p pointe
vers un entier, non ? Tu as bien écrit "int* p", ou c'est mes yeux ? :)
Oui, mais l'entier et le tableau ont la même adresse.
C'est la notion de 'pointe sur' qui n'est pas claire.
Je comprends. Comme je l'ai dit, pour moi « pointeur » est un type. Donc
« p pointe vers un tableau » sous-entend « p est une expression de type
pointeur vers tableau ».
Et pour en revenir à la phrase originale, « la valeur d'un tableau est
un pointeur vers son premier élément » serait formellement « la rvalue
d'une expression de type tableau est une expression de type "pointeur
vers le type du premier élément du tableau", et qui représente l'adresse
(ou le pointeur) du premier élément du tableau ». Ca fait beaucoup de
raccourcis, certes. Mais la question principale des raccourcis
linguistiques n'est-elle pas de savoir si ceux-ci peuvent avoir un sens
erroné ? Et je ne vois pas trop comment on pourrait interpreter celui-là
différemment de sa version formelle.
Dans le premier cas, *p est de type
int, dans l'autre, il est de type int[4].
Oui, modulo 64. Ce que je dis, c'est que *p a une *valeur* (rvalue) de
type pointeur vers int.
Bof... A ce rythme là, il a aussi une valeur de type char*
(modulo sizeof(int)).
Comprends pas.
*p est de type array-to-T.
typedef int Tab64[64];
Tab64 a;
int* pi= a;
Trab64* pt= &a;
pi est de type pointer-to-int
*pi est de type int
pt est de type pointer-to-array-to-T
*pt est de type array-to-T
Oui. Et ?
Ce dont je parlait ici, c'est des énoncés du type « Whenever we use the
name of an array as a value, that name represents a pointer to the
initial element of the array. » (Accelerated C++).
Sauf avec sizeof et &.
Non. Tout est dans le « as a value ».
Pour moi, pointeur est un type. Ou plutôt un ensemble de types (pointeur
vers T). Je considère « un pointeur » comme synonyme de « une
expression de type pointeur ». Et une rvalue est une expression...
Faut faire attention avec ces raccourcis. Car alors 1 est un int,
et 0.0 un double.
Sans réserve, je dis oui. Même si toi ou ED n'êtes pas d'accord. « 1 est
un int » dans le sens « 1 est une expression (constante) de type int (ou
entier) ». Tout comme
double d; // d est un double
int* p; // p est un pointeur
et qu'une 306, c'est une Peugeot.
Ce singulier-pluriel (*la* valeur ; *ses* cases) peut-il avoir un sens ?
Ou alors la valeur de l'ensemble de ses cases ? Mais je ne sais pas ce
que c'est.
La valeur de l'ensemble de ses cases ? Tu ne vois pas ce que c'est ?
Hmm. Si. Finalement. Comme quoi.
La norme C ne parle pas de rvalue. En note de bas de la page 46, on peut
lire : « What is sometimes called ??rvalue?? is in this International
Standard described as the ??value of an expression??. ».
On lit également (§3.17/1): « value : precise meaning of the contents of
an object when interpreted as having a specific type. ». Mais la norme
du C ne définit pas la « valeur » d'un tableau.
Pourtant, il faut bien donner une sémantique à
struct {
char tab[7];
double d;
} x , y= { "toto", 0.O } ;
x= y;
Je suis pas expert en recherche dans la norme, mais 6.5.16.1/1 définit
bien l'affectation comme le remplacement de 'value'. Donc, il faut
définir 'value' pour x et y. Et je ne vois pas comment faire sans
parler de 'value' pour tab.Pour la norme C :
- Pour les lvalue qui ne sont pas de type tableau, on a une « valeur
contenue », synonyme de « valeur ». Pour les lvalue de type tableau, on
a une autre conversion, et on s'abstient de parler de valeur.
Et comment on exprime l'affectation entre tableaux dans des structures ?
Tu as raison. Je ne sais pas.
Donc, si tu es d'accord, on a
- pour le C, une notion de « rvalue » synonyme de « valeur », une «
valeur » synonyme de « valeur contenue », et un contexte (implicite,
certes) de valeur pour un tableau. Conclusion : la rvalue d'un tableau
existe et est son contenu (avec sens).
- pour le C++, une notion de « rvalue » définie pour un tableau : c'est
un pointeur (ou appelle le comme tu veux) vers son premier élément.
Donc C et C++ ont des définitions différentes de rvalue pour les
tableaux. C'est triste.
Bon... Outre le fait que je me découpe les cheveux en quatre, suis-je en
train de raconter des conneries ?