Ir ao conteúdo
  • Cadastre-se

C++ C++: porque não posso usar o 'auto' com o 'typedef'?


Cambalinho

Posts recomendados

em alguns casos usamos o 'auto' por não saber o tipo exacto... mas eu tenho 1 caso especifico e só queria usar outro nome em vez do 'auto'.
sim posso usar uma macro... mas demasiados programadores querem que evitamos de usar macros... em alguns casos entendo, mas noutros nos ajuda e muito mesmo.

porque não posso usar o 'auto' com o 'typedef'?

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Bom Dia @Cambalinho

 

24 minutos atrás, Cambalinho disse:

porque não posso usar o 'auto' com o 'typedef'?

Sem delongas: atente que ambas são palavras reservadas.

 

A primeira (auto) necessita de um inicializador para definir o tipo da variável automaticamente, ou seja, auto não é um tipo de dados, porém sim uma palavra que solicita que pela inicialização o tipo da variável será definido.

 

A segunda (typedef)  "É usado para criar um nome alternativo para outro tipo de dados", ou seja, ela necessita de um tipo (e auto não é um tipo de dados) para definir um outro nome, um alias para simplificar e torna mais literal.

 

Entendeu?

 

  • Curtir 1
  • Amei 1
Link para o comentário
Compartilhar em outros sites

6 minutos atrás, Cambalinho disse:

mas o 'auto' aceita qualquer tipo de dados sim... só queria era ter oportunidade de ter outro nome\sinónimo disponível, mas  para isso uso 1 macro para facilitar

Você ainda não entendeu!

 

A palavra reservada auto não é um tipo de dado! Repito, ela solicita que o tipo será definido na inicialização, tanto que inicializar é obrigatório.

 

6 minutos atrás, Cambalinho disse:

só queria era ter oportunidade de ter outro nome\sinónimo disponível

Não será possível com auto e typedef porque typedef opera apenas com tipo de dados. Isso já está provado por você mesmo tanto que veio aqui em busca de explicação do porque não funciona.

  • Curtir 1
  • Amei 1
Link para o comentário
Compartilhar em outros sites

agora, Cambalinho disse:

sim

Claro que pode! O seu valor pode ser impresso usando as métodos padrões sem problema conhecido.

 

Já enquanto o nome do tipo definido automaticamente isso não sei como é possível, mas que é possível também é. Porém já que a definição depende de uma atribuição/inicialização faz pouco sentido ter dúvidas quanto ao tipo.

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

boa

#include <iostream>

//for the type_name():
#include <type_traits>
#include <typeinfo>
#ifndef _MSC_VER
#   include <cxxabi.h>
#endif
#include <memory>
#include <string>
#include <cstdlib>

template <class T>
std::string
type_name()
{
    typedef typename std::remove_reference<T>::type TR;
    std::unique_ptr<char, void(*)(void*)> own
           (
#ifndef _MSC_VER
                abi::__cxa_demangle(typeid(TR).name(), nullptr,
                                           nullptr, nullptr),
#else
                nullptr,
#endif
                std::free
           );
    std::string r = own != nullptr ? own.get() : typeid(TR).name();
    if (std::is_const<TR>::value)
        r += " const";
    if (std::is_volatile<TR>::value)
        r += " volatile";
    if (std::is_lvalue_reference<T>::value)
        r += "&";
    else if (std::is_rvalue_reference<T>::value)
        r += "&&";
    return r;
}
  
//used:
int main()
{
    auto ci = 0;
    std::cout << type_name<decltype(ci)>()<< '\n';

    return 0;
}
  
//output:
int

e está certo mesmo... se usar o 'const int' em vez do 'auto', iremos ter o 'const int'.

este código foi testado no site: https://www.onlinegdb.com/online_c++_compiler
penso que é  compatível com GCC.
muito obrigado

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!