2010-05-28 12 views
5

De Herb Sutter de GotW #6¿Cuándo un tipo de retorno const interfiere con la creación de instancias de plantilla?

retorno por valor debería ser normalmente const de tipos de retorno no incorporadas. ...

Nota: Lakos (Pág. 618) argumenta en contra de devolver el valor const, y señala que es redundante para órdenes internas de todos modos (por ejemplo, volviendo "const int"), que señala pueden interferir con creación de instancias de plantilla.

Mientras Sutter parece estar en desacuerdo sobre si se debe devolver un valor const o el valor no constante al devolver un objeto de un tipo no construido por valor de Lakos, que por lo general está de acuerdo que la devolución de un valor de un const incorporado en tipo (por ejemplo, const int) no es una buena idea.

Si bien entiendo por qué es inútil porque el valor de retorno no se puede modificar, ya que es un valor r, no puedo encontrar un ejemplo de cómo podría interferir con la creación de instancias de la plantilla.

Dame un ejemplo de cómo tener un calificador const para un tipo de devolución puede interferir con la creación de instancias de la plantilla.

Respuesta

3

Aquí está un ejemplo sencillo que implica punteros de función:

const int f_const(int) { return 42; } 
int f(int) { return 42; } 

template <typename T> 
void g(T(*)(T)) 
{ 
    return; 
} 

int main() 
{ 
    g(&f_const); // doesn't work: function has type "const int (*)(int)" 
    g(&f);  // works: function has type "int (*)(int)" 
} 

Tenga en cuenta que Visual C++ 2010 acepta incorrectamente ambos. Comeau 4.3.10 y g ++ 4.1.2 correctamente no aceptan la llamada g(&f_const).

Cuestiones relacionadas