Sono d'accordo con gli altri - chiede scontro di nomi, ambiguità e poi il fatto è che è meno esplicito. Mentre posso vedere l'uso di using
, la mia preferenza personale è di limitarlo. Vorrei anche considerare fortemente ciò che alcuni altri hanno sottolineato:
Se vuoi trovare un nome di funzione che potrebbe essere un nome abbastanza comune, ma vuoi trovarlo solo nello std
spazio dei nomi (o viceversa - vuoi cambiare tutte le chiamate che non sono nello spazio dei std
nomi X
, nello spazio dei nomi , ...), allora come proponi di farlo?
Potresti scrivere un programma per farlo, ma non sarebbe meglio passare il tempo a lavorare sul tuo progetto piuttosto che scrivere un programma per mantenere il tuo progetto?
Personalmente, in realtà non mi dispiace il std::
prefisso. Mi piace più l'aspetto che non averlo. Non so se sia perché è esplicito e mi dice "questo non è il mio codice ... sto usando la libreria standard" o se è qualcos'altro, ma penso che sia più bello. Questo potrebbe essere strano dato che solo recentemente sono entrato in C ++ (usato e faccio ancora C e altre lingue per molto più tempo e C è la mia lingua preferita di tutti i tempi, proprio sopra l'assemblaggio).
C'è un'altra cosa, sebbene sia in qualche modo correlata a quanto sopra e ciò che altri sottolineano. Anche se questa potrebbe essere una cattiva pratica, a volte mi riservo std::name
la versione e il nome della libreria standard per l'implementazione specifica del programma. Sì, davvero questo potrebbe morderti e morderti duramente, ma tutto si riduce al fatto che ho iniziato questo progetto da zero e sono l'unico programmatore per questo. Esempio: sovraccarico std::string
e lo chiamo string
. Ho aggiunte utili. L'ho fatto in parte a causa della mia tendenza C e Unix (+ Linux) verso i nomi minuscoli.
Oltre a ciò, puoi avere alias dello spazio dei nomi. Ecco un esempio di dove è utile a cui potrebbe non essere stato fatto riferimento. Uso lo standard C ++ 11 e in particolare con libstdc ++. Bene, non ha std::regex
supporto completo . Certo, si compila, ma genera un'eccezione sulla falsariga di essere un errore alla fine del programmatore. Ma è mancanza di implementazione.
Quindi ecco come l'ho risolto. Installa il regex di Boost e collegalo. Quindi, faccio quanto segue in modo che quando libstdc ++ è stato implementato completamente, devo solo rimuovere questo blocco e il codice rimane lo stesso:
namespace std
{
using boost::regex;
using boost::regex_error;
using boost::regex_replace;
using boost::regex_search;
using boost::regex_match;
using boost::smatch;
namespace regex_constants = boost::regex_constants;
}
Non discuterò se questa è una cattiva idea o meno. Sosterrò comunque che lo mantiene pulito per il mio progetto e allo stesso tempo lo rende specifico: vero, devo usare Boost, ma lo sto usando come alla fine lo avrà libstdc ++. Sì, iniziare il tuo progetto e iniziare con uno standard (...) all'inizio fa molto per aiutare la manutenzione, lo sviluppo e tutto ciò che è coinvolto nel progetto!
Giusto per chiarire qualcosa: in realtà non penso sia una buona idea usare un nome di classe / qualunque cosa nella STL deliberatamente e più specificamente al posto di. La stringa è l'eccezione (ignora la prima, sopra, o la seconda qui, gioco di parole se devi) per me dato che non mi piaceva l'idea di "String".
Così com'è, sono ancora molto orientato verso C e contro C ++. Dettagli risparmiati, gran parte di ciò su cui lavoro si adatta di più a C (ma è stato un buon esercizio e un buon modo per farmi a. Impara un'altra lingua e b. Cerca di non essere meno distorto rispetto a oggetto / classi / ecc. Che è forse meglio affermato come meno di mentalità chiusa, meno arrogante e più accettante.). Ma ciò che è utile è ciò che alcuni hanno già suggerito: uso davvero list (è abbastanza generico, no?), E ordina (stessa cosa) per nominarne due che causerebbero uno scontro di nomi se dovessi fare using namespace std;
, e così a tal fine preferisco essere specifico, in controllo e sapendo che se intendo che sia l'uso standard, dovrò specificarlo. In parole povere: non dare per scontato.
E per rendere parte della regex di Boost std
. Lo faccio per l'integrazione futura e - di nuovo, lo ammetto pienamente, questo è pregiudizio - Non penso che sia brutto come boost::regex:: ...
. In effetti, questa è un'altra cosa per me. Ci sono molte cose in C ++ che devo ancora arrivare ad accettare completamente in aspetti e metodi (un altro esempio: modelli variadici contro argomenti var [anche se ammetto che i modelli variadici sono molto utili!]). Anche quelli che accetto sono stati difficili e ho ancora problemi con loro.