Le pointeur buffer
est un "lvalue", bu t lorsque l'opération de coulée est appliquée, l'expression:
(char*) buffer
est un « rvalue » (en fait une « rvalue modifiable » - mais je pense que seules les questions dans la prochaine C++ 0x). Les références non const ne peuvent pas être liées à des valeurs.
Cependant, const les références peuvent être liées à des valeurs.Ainsi, la modification suivante à votre programme compilera:
void foo(char* const& p) // added 'const'
Stephan T. Lavavej a récemment publié une entrée de blog qui a d'excellentes informations sur lvalues, rvalues et références:
L'article traite en réalité des nouvelles "références rvalue" qui arrivent en C++ 0x, mais il a une excellente explication de ce que lvalues et rvalues sont et comment elles peuvent et ne peuvent pas fonctionner avec des références en C++ 98. C'est une longue lecture, mais ça vaut vraiment le coup.
Je pense que ChrisW a effectivement corrigé le bogue dans votre code lors de l'édition ... vous étiez en train de lancer un BYTE * en un (char) au lieu d'un (char *). – UncleZeiv
Non, vous ne pouvez pas passer une référence temporaire par non-const, donc l'erreur est toujours là: la distribution crée un temporaire et qui ne peut pas être transmis par référence. –
@UncleZeiv l'histoire d'édition dit que j'ai fait, mais je ne me souviens pas de le faire. Je ne peux pas l'expliquer. Cela aurait-il pu être quelqu'un d'autre, le PO même, en train de faire une édition simultanée? – ChrisW