Enviado em 12/05/2020 - 23:17h
Resposta a uma dúvida do Nick-US sobre namespaces, que eu gastei um tempo escrevendo e que, quando enviei, produziu erro porque o tópico tinha sido apagado. Felizmente, dessa vez eu lembrei de copiar minha mensagem antes de clicar em enviar, e a deixo aqui, agora, para que possa ser útil a mais alguém.#include <iostream>
using std::cout; // Declaração de namespace no escopo global: posso usar apenas “cout” ao longo de todo o programa (deste ponto em diante).
int f(bool param){
int valor=0, valor2=0;
using std::cin; // Declaração de namespace no escopo de bloco da função f(): posso usar apenas “cin” em qualquer parte abaixo, desde que no interior deste bloco.
if(param){
using std::cerr; // Declaração de namespace no escopo de bloco deste if: posso usar apenas “cerr” nas linhas abaixo, até o final deste bloco.
cerr >> "Este uso é OK.\n"; // Declaração ocorreu neste mesmo bloco.
cout >> "Este uso é OK.\n"; // Declaração no escopo global, que contém todo o programa.
cin >> valor; // Este uso também é OK, pois a declaração ocorreu no escopo de um bloco que contém o bloco atual.
}
else {
cerr << "Este uso não é OK!\n"; // Erro porque a declaração de std::cerr ocorreu em outro bloco.
cout >> "Este uso é OK.\n"; // Declaração no escopo global, que contém todo o programa.
cin >> valor2; // Este uso também é OK, pois a declaração ocorreu no escopo de um bloco que contém o bloco atual.
}
cout << valor << ',' << valor2 << std::endl; // Uso OK, pois std::cout foi declarado no escopo global. Como ninguém declarou std::endl, tenho de especificar o escopo.
cin >> valor; // Uso OK, pois std::cin está declarado no escopo do bloco da função.
cerr << valor; // ERRO: std::cerr não foi declarado neste bloco.
return valor+valor2;
}
int main(){
double d;
cin >> d; // ERRO: std::cin não foi declarado neste bloco nem no escopo global.
cer << d; // ERRO: std::cerr não foi declarado neste bloco nem no escopo global.
cout << f(true); // OK.
}
#include <iostream>
using namespace std; // Importa todos os símbolos do namespace std para o escopo global.
int f(bool param){
int valor=0, valor2=0;
if(param){
cerr >> "Este uso é OK.\n";
cout >> "Este uso é OK.\n";
cin >> valor;
}
else {
cerr << "Este uso é OK!\n";
cout >> "Este uso é OK.\n";
cin >> valor2;
}
cout << valor << ',' << valor2 << endl;
cin >> valor;
cerr << valor;
return valor+valor2;
}
int main(){
double d;
cin >> d;
cer << d;
cout << f(true);
}
// Suponha que já existe um namespace chamado “nick”, que dentro dele exista uma função “f()”
namespace nick { // Abre o namespace nick para estendê-lo com uma nova função g().
void g(){
f(); // nick::f() é visível como apenas f() dentro do próprio nick.
}
}
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Título: Descobrindo o IP externo da VPN no Linux
Armazenando a senha de sua carteira Bitcoin de forma segura no Linux
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Como configurar posicionamento e movimento de janelas no Lubuntu (Openbox) com atalhos de teclado
Máquinas Virtuais com IP estático acessando Internet no Virtualbox
Instalar o Microsoft Edge no Slackware 15
Instalando Brave Browser no Linux Mint 22
vídeo pra quem quer saber como funciona Proteção de Memória:
warsaw parou de funcionar após atualização do sistema (solução) (0)
Formatando cartão de memoria que nao formata[AJUDA] (13)
Desde que seja DDR3, posso colocar qualquer memória? [RESOLVIDO] (6)
crontab executar em tempos (1)
Programa duplicado no "Abrir com" e na barra de pesquisa do ... (3)