una que programacion poo orientada objetos miembros metodos funciones funcion ejemplos ejemplo derivadas codigo clases clase atributos amigas c++ c++11 decltype c++14 return-type-deduction

programacion - que es una clase en c++



DevoluciĆ³n del tipo de devoluciĆ³n con una variable miembro privada (2)

Como se explicó en esta sesión de preguntas y respuestas de ayer , tanto g ++ 4.8 como Clang 3.3 se quejan correctamente del código a continuación con un error como "''b_'' no se declaró en este ámbito"

#include <iostream> class Test { public: Test(): b_(0) {} auto foo() const -> decltype(b_) // just leave out the -> decltype(b_) works with c++1y { return b_; } private: int b_; }; int main() { Test t; std::cout << t.foo(); }

Mover la sección private a la parte superior de la definición de clase elimina el error e imprime 0.

Mi pregunta es, ¿este error también desaparecerá en C ++ 14 con la deducción por tipo de retorno , de modo que pueda omitir el tipo de decltype y tener mi sección private al final de la definición de la clase?

NOTA : Realmente funciona basado en la respuesta de @JesseGood.


No lo creo, porque C ++ 14 tendrá una deducción automática del tipo de retorno. Lo siguiente compila con g ++ 4.8 al pasar la -std=c++1y .

auto foo() const { return b_; }


No, pero ya no hay necesidad de esto porque puedes decir

decltype(auto) foo() const { return b_; }

Esto deducirá el tipo de retorno automáticamente de su cuerpo.