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.
}
}
Como gerar qualquer emoji ou símbolo unicode a partir do seu teclado
Instalar e Configurar o Slackware Linux em 2025
Como configurar os repositórios do apt no Debian 12 em 2025
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Muitas dificuldades ao instalar distro Linux em Notebook Sony Vaio PCG-6131L (VPCEA24FM)
Slackpkg+ (Slackpkg Plus) está de volta!
Como dividir duas janelas igualmente e lado-a-lado na sua tela
Configurando o Conky para iniciar corretamente no sistema
3 configurações básicas que podem melhorar muito a sua edição pelo editor nano
Pedagogia no brasil não passa de alfabetização por m4sturbação mental ... (2)
compilação samba 4.22 rock linux 9.5 (3)
Erro de segmentação «Segmentation fault (core dumped)» ao retornar obj... (7)