Editar: Parece que pegué el código incorrectamente en Comeau, o que fue editado en la respuesta original para ser correcto. En cualquier caso, estoy conservando la respuesta a continuación como si el código fuera incorrecto.
Comeau compilador de línea da los siguientes resultados:
"ComeauTest.c", line 4: error: type qualifier specified more than once
const char const * const GetName() { return m_name; } const; ^
"ComeauTest.c", line 4: warning: type qualifier on return type is meaningless const char const * const GetName() { return m_name; } const; ^
"ComeauTest.c", line 4: error: declaration does not declare anything const char const * const GetName() { return m_name; } const;
Lo que esto significa es que su declaración está mal formado.
const char const * const GetName() { return m_name; } const;
La primera y la segunda conste significan lo mismo. No puede especificar el mismo calificador más de una vez, por lo que uno de estos debería eliminarse para que el código se compile. Ambas consts especifican que los valores apuntada por el puntero devuelto por GetName no puede ser modificado, por lo que un código como éste no válido:
const char* name = c.GetName();
name[0] = 'a';
La tercera const especifica que el puntero devuelto por GetName() en sí no puede ser modificado, pero como Comeau señala, esto no logra nada en un valor de retorno porque el valor de retorno es una copia del puntero en lugar del puntero en sí, y puede asignarse a un puntero no const.
está fuera de lugar El cuarto const, debería ser entre GetName y el cuerpo de la función como esta:
const char* GetName() const { return m.name; }
Este const especifica que no hay miembros de la clase serán modificados durante la ejecución de GetName.Suponiendo que GetName un miembro de la clase Person, se permitiría este código:
const Person& p;
p.GetName();
Sin esta const, el código anterior sería un fracaso.
El código probablemente sea diferente, ya que lo que ha publicado es incorrecto. Probablemente fue algo en la línea de 'clase X {const char * const getName() const {return m_name; } ... ' –
Espera, ¿escribiste la mitad del período? – tster
La doble const en 'const char const' es válida en C99, pero no es válida en C++. Solo una const permitida, pero cuál eliminar no importa. –