Qual é a diferença entre cin e std:: cin?


Melhor resposta

std é um namespace. Os namespaces foram adicionados ao C ++ STD 90. Em versões anteriores do C ++, uma vez que não havia namespace, você usava cout e no C ++ moderno você usará std :: cout.

Apenas para completar, eu usei para mencionar que se você declarou no início que é using namespace std;, cout significará std::cout .

Mas essa não é uma maneira recomendada e deve ser evitada em favor de um nome std :: cout totalmente qualificado.

TL; DR; Os namespaces evitam conflitos de nomes em projetos grandes. std é o namespace das Bibliotecas Padrão de C ++.

Explicação: Exatamente como o nome sugere, os namespaces são usados ​​para limitar o escopo de nomes exclusivos, reduzindo a possibilidade de ter duas entidades com o mesmo nome. Cada idioma precisa disso e fornece isso de uma forma ou de outra. Java o chama de pacote, por exemplo.

Em programas pequenos, digamos de 100 a 500 linhas, parece um exagero ter um * recurso de linguagem * para garantir que todos os nomes sejam únicos ou algo parecido. Mas o conflito de nomes pode acontecer de maneiras mais ocultas. Se eu escrevi uma biblioteca que tem uma classe chamada XYZ e seu outro amigo escreveu outra biblioteca que tem o mesmo nome de classe XYZ. (As aulas podem servir para finalidades diferentes ou iguais, mas isso não importa.) Não teremos nenhum problema do nosso lado. Agora, suponha que você esteja desenvolvendo um software e usando AMBAS as bibliotecas. Agora, seu projeto tem duas definições de classe XYZ. Isso simplesmente interromperá a construção e, mesmo que provavelmente você não use / precise de nenhuma das duas classes, só porque elas são definidas com o mesmo nome, será impossível construir qualquer código com essas duas bibliotecas juntas.

Os namespaces resolvem esse problema. Eu e seu amigo teremos namespaces diferentes para nossas bibliotecas. (Os namespaces precisam ser globalmente exclusivos e, portanto, muitas vezes incluem a identidade do nome da empresa do desenvolvedor também, para que alguns outros desenvolvedores que escrevem uma biblioteca não escolham o mesmo namespace para sua biblioteca)

Um clássico um exemplo é a classe List em Java. Existem 2 listas. Uma é uma interface para a estrutura de dados List. Outro é a Lista de componentes da Lista de GUI. Você pode usar ambos em um programa e, nesse caso, irá referenciá-los por nomes totalmente qualificados (java.util.List ou java.awt.List). Os pacotes permitem que você use os mesmos nomes, caso contrário, se tentarmos adicionar ambos, o compilador nunca saberá qual lista você deseja e anunciará o erro por causa da ambigüidade (tendo 2 significados igualmente dedutíveis de uma única instrução).

std é o nome escolhido para C ++ Standard Library.

Isso significa que tudo nas bibliotecas padrão será encontrado em std e no código será referido como std :: cout, std :: string , std :: map e assim por diante.

Isso também significa que você NÃO deve definir nada no namespace std e deve criar um namespace separado sempre que estiver escrevendo uma biblioteca, para não poluir namespace std.

Resposta

Se você estiver usando um compilador antigo, simplesmente cin funcionará bem.

Mas com o C ++ moderno, todo o material padrão está envolvido no namespace std .

Os namespaces ajudam a evitar conflitos de nomenclatura entre bibliotecas ou arquivos de cabeçalho.

Então, se você estiver usando compilações modernas er, então você tem que importar o namespace bre para poder usá-lo ou, se não quiser importar todas as construções, mas apenas algumas delas, use std :: cin ou std :: cout.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *