Sono totalmente frustrato con questi specificatori perché capisco cosa fanno quando sono da soli ma li trovo difficili da capire quando sono usati l'uno con l'altro. Ad esempio, un po 'di codice in natura conteneva -statico, constexpr, const - cosa significano quando tutti usati insieme?
namespace{
static constexpr char const *Hello[] = { "HelloString", "WorldString"};
...
}
cosa fa anche questo?
- perché utilizzare statico quando si è già all'interno di uno spazio dei nomi anonimo. E le statiche all'interno delle classi hanno senso (a meno che tu non stia scrivendo C che manca di spazi dei nomi), senza classi - perché ??
- perché usare constexpr - non c'è motivo di usarlo qui. non sarebbe un semplice
const
? - e quindi
const *Hello
non ha senso per me. Cosa è costante qui? Le stringhe o il puntatore*Hello
?
E peggio di tutto, compila: /. Ovviamente si compilerebbe perché sono dichiarazioni valide, ma cosa significa?
constexpr suggerisce di utilizzare C++ 11. Conoscere questa statica ha senso di nuovo perché renderà sicuro il thread di inizializzazione. (statica magica). E constexpr lo rende utilizzabile in luoghi in cui non funzionerebbe con const. – Totonga
Non penso di inizializzare uno scalare con una compilazione di liste iniziali rinforzate. –
Perché la statica magica e la sicurezza dei thread sono importanti per l'inizializzazione del caricamento? Che tipo di esecuzione parallela potrebbe accadere lì? – IanH