Newsgroup: it.comp.lang.c++
Titolo: costruttore di copia

Saluti a tutti.
Questo programma č legale?
#include <iostream>
struct foo
{
   foo() {  }
   foo(const foo&) { std::cout << "const foo&\n"; }
   foo(volatile foo&) { std::cout << "volatile foo&\n"; }
   foo(foo&) { std::cout << "foo&\n"; }
};
int main()
{
   {
      foo c;
      foo f = c;
   }
   {
      const foo c;
      foo f = c;
   }
   {
      volatile foo c;
      foo f = c;
   }
}
Con il BCC 5.5 ed il DJGPP compila e l'output č:
foo&
const foo&
volatile foo&
Ciao e grazie   Manlio Perillo

 Con il BCC 5.5 ed il DJGPP compila e l'output è:



In effetti la mia era una semplice curiosità.
Comunque mi sono imbattuto (nell'esempio di seguito riportato) in messaggi
del compilatore che non capisco pienamente.
L'esempio è il seguente:
      const volatile foo c;
      foo f = c;
Il BCC 5.5 mi dice:
Error E2357 ctor.cpp 23: Reference initialized with 'const volatile foo', needs
lvalue of type 'foo' in function main()
Error E2340 ctor.cpp 23: Type mismatch in parameter 1 (wanted 'const foo &', got
 'foo') in function main()
mentre il DJGPP:
ctor.cpp: In function `int main()':
ctor.cpp:23: conversion from `const volatile foo' to `foo &' discards qualifiers
ctor.cpp:8: in passing argument 1 of `foo::foo(foo &)'
Ciao  Manlio Perillo

 ctor.cpp:8: in passing argument 1 of `foo::foo(foo &)'
Non e' difficile. Il costruttore prenderebbe un "const foo&" ma tu gli passi un
"const volatile foo&". Se accetta il binding, dall'interno del costruttore
l'oggetto non e' modificabile, ma e' leggibile con semantica non-volatile. Il
che non e' bene dato che in realtà l'oggetto e' volatile.
Se poi dovesse invece scegliere l'altro costruttore ( volatile foo& ) la
semantica dell'accesso sarebbe volatile ... ma l'oggetto sarebbe modificabile,
mentre era invece const.
Quindi come vedi in entrambe i casi ci sarebbe un problema e quindi il
compilatore non puo' "passare via liscio".
--
Andrea Ferro
---------
Brainbench C++ Master. Scored higher than 97% of previous takers
Scores: Overall 4.46, Conceptual 5.0, Problem-Solving 5.0
More info 
http://www.brainbench.com/transcript.jsp?pid=2522556

presenta il caso specifico.
ehm, scusate, ma paragrafi di che? un libro , un tutorial??
grazie (č che sono interessato anch'io..!)
-- 
Davide Cavallari
* per contattarmi via e-mail, eliminare "NOSPAM" dall'indirizzo *

grazie (č che sono interessato anch'io..!)
Dello standard, cioč il documento ufficiale che stabilisce cosěč il
C++.
-- 
Marco Barisione (ICQ 84277092)

 };
ma questi sono copy ctor? A quanto ne so l'unico copy ctor e' foo(const 
foo&). O sbaglio?
 
ciao Anto
-- 
Antonio Cuni, 19 anni, studente
Brainbench C++ Master: 4.6, higher than 98% of all previous test takers.
C Language: 3.32, higher than 79% of all previous test takers.
Guida C/C++ di Programmazione.it: 
http://cpp.programmazione.it

C++.
dove lo posso trovare?
grazie


 foo&). O sbaglio?
No. Sono tutti copy constructor, ed una classe puo' averli tutti.
Ciao,
Nicola

 dove lo posso trovare?
Il modo piu' comodo e' per via elettronica tramite l'ANSI, al seguente
link:
http://webstore.ansi.org/ansidocstore/product.asp?sku=ISO%2FIEC+14882%2D1998
In formato elettronico (PDF) costa 18 dollari.
Ciao,
Nicola