[VC++] Const reference to pointer

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Werkt wel
void func (int *& rpInt) { 
  int a = *rpInt + 2;
}

// Werkt niet
void func (const int *& rpInt) { 
  int a = *rpInt + 2;
}

int main()
{
  int nvar=2;
  int* pvar = &nvar;
  func(pvar);

  return 0;
}


In het tweede geval krijg ik de volgende melding van de compiler:

1>Compiling...
1>main.cpp
1>main.cpp(15) : error C2664: 'func' : cannot convert parameter 1 from 'int *' to 'const int *&'
1>        Conversion loses qualifiers


In Borland C++Builder 6 werkt het wel. Is er een reden waarom dit niet kan in Visual Studio 2005? Ik snap hem even niet.

Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Ik vond deze post wel interessant hieromtrend:

http://www.keyongtech.com...-between-const-type-and#3

Ik kan je wel niet zeggen waarom het WEL werkt in BCB6.

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 26-06 13:46

.oisyn

Moderator Devschuur®

Demotivational Speaker

Logisch. 'pvar' is geen const int*, dus je kunt ook geen referentie naar dat type krijgen. Kan dat wel, dan zou je pvar naar een const int* kunnen laten wijzen.

C++:
1
2
3
4
5
6
7
8
9
int a = 1;
const int b = 2;

int * prt = &a;
*ptr = 42;    // a is nu 42

const int *& ptr2 = ptr;
ptr2 = &b;    // ptr wijst nu naar b
*ptr = 42;    // b nu 42? maar hij was const!


Dit werkt dan weer wel:
C++:
1
2
3
const int * const & ptr2 = ptr;
ptr2 = &b;    // dit kan niet, ptr2 is zelf ook const, dus de assignment mag niet
int c = *ptr2;

[ Voor 25% gewijzigd door .oisyn op 28-05-2010 15:11 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.