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.
}
}
Links importantes de usuários do VOL (3)
Atenção a quem posta conteúdo de dicas, scripts e tal (2)
Crie alias para as tarefas que possuam longas linhas de comando - bash e zsh
Criando um gateway de internet com o Debian
Configuração básica do Conky para mostrar informações sobre a sua máquina no Desktop
Aprenda a criar músicas com Inteligência Artificial usando Suno AI
Entendendo o que é URI, URL, URN e conhecendo as diferenças entre POST e GET
Instalando Discord no Fedora 40
Instalando Discord no Ubuntu 24.04 LTS
Como instalar o XFCE4-terminal na sua distribuição Linux e integrá-lo ao sistema
Como instalar o Tilix Terminal no Gnome e usá-lo como menu drop-down ao estilo Quake
Required key not available Refer to the mount.cifs(8) (0)
Sistema da Coréia do Norte - Red Star OS (38)
Problemas de instalação hyprland + Void Linux (1)
Acento til, agudo e circunflexo nao funcionam com Debian (4)