2015-04-03 15 views
6

Oggi ho accidentalmente inserito const all'inizio del mio costruttore (errore di copia incolla) ed è stato compilato. Ho provato solo questo in Visual Studio 2008 che è pre C++ 11. Questa sintassi ha qualche significato? Sono i primi tentativi di Microsoft a constexpr?Esiste un costruttore di const?

class foo 
{ 
public: 
    const foo(int i){} 
}; 

foo f(1); 
+0

Mi chiedo quale influenza abbia, se esiste, in VC++ 08. Potrebbe essere semplicemente .. ignorato? – user2864740

+0

Sono stato in grado di chiamare funzioni non const nel corpo del costruttore, quindi, se ha un effetto, non limita ciò che viene chiamato nel costruttore. – cppguy

+1

@cppguy che non è così sorprendente, dal momento che il ctor non è dichiarato come 'foo (int i) const'. Mi chiedo se quest'ultimo funziona in VS (con una variabile membro mutevole), anche se i medici non possono essere qualificati per il cv :) – vsoftco

risposta

4

Il tuo codice non è conforme allo standard, non esiste nulla di simile. Tuttavia, a partire da C++ 11, è possibile avere costruttori constexpr, quindi il tuo oggetto è costruito in fase di compilazione e può essere ulteriormente utilizzato nelle espressioni constexpr.

Anche se non lo uso, MSVS non è il miglior compilatore in termini di conformità agli standard, almeno questo è ciò che ho realizzato da varie domande su questo sito.

Problemi correlati