
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.
}
}
Fscrypt: protegendo arquivos do seu usuário sem a lentidão padrão de criptograr o disco
Faça suas próprias atualizações de pacotes/programas no Void Linux e torne-se um Contribuidor
Como rodar o Folding@home no Linux
Criando um painel de controle (Dashboard) para seu servidor com o Homepage
O Abismo entre o Código e o Chão: Saltos Tecnológicos e a Exclusão Estrutural no Brasil
Pisando no acelerador do Linux Mint: Kernel XanMod, zRAM e Ajustes de Swap
Como compilar kernel no Linux Mint
Lançamento do Brutal DOOM test 6
Consertando o erro no Brave de webgl
Solução para ter de volta as bordas e barra de títulos das janelas em zenity no Debian 13.x
Seno, Coseno, Tangente em CLIPPER (1)
Inserir uma URL num arquvo pelo Ubuntu (CLIPPER) (0)
VMWare Player não conecta na rede nem consigo intercambiar arquivos (1)









