Spesso mi trovo a voler scrivere un codice come questo: class MyClass { public: void addObject(std::unique_ptr&& newObject); void removeObject(const Object* target); private: std::set<std::unique_ptr> objects; }; Tuttavia, gran parte dell’interfaccia std :: set è praticamente inutile con std :: unique_ptrs poiché le funzioni di ricerca richiedono i parametri std :: unique_ptr (che ovviamente non ho perché […]
Nel nostro progetto usiamo un bel po ‘di “usanze” per indicare esplicitamente cosa si suppone che la variabile rappresenti. Viene utilizzato principalmente per std::string identificatori di std::string come PortalId o CakeId . Ora quello che possiamo fare attualmente è using PortalId = std::string; using CakeId = std::string; PortalId portal_id(“2”); CakeId cake_id(“is a lie”); portal_id = […]
Ho deciso di dare una nuova definizione di C++14 di constexpr uno spin e per ottenere il massimo da esso ho deciso di scrivere un parser di stringa in fase di compilazione. Tuttavia, sto lottando per mantenere il mio object un constexpr mentre lo passo a una funzione. Considera il seguente codice: #include #include class […]
Sarò in grado di eseguire quanto segue per la funzione principale in C ++ 1y (C ++ 14): auto main() { // … } Quindi il tipo restituito sarà automaticamente int anche se non abbiamo bisogno di usare un return 0; esplicito return 0; ?
Qual è il comportamento corretto per il seguente programma? // example.cpp #include #include struct Foo { void Bar() const { std::cout << "Foo::Bar()" << std::endl; } }; std::shared_ptr MakeFoo() { return std::make_shared(); } int main() { auto p { MakeFoo() }; p->Bar(); } Quando lo compilo nella mia workstation Linux RHEL 6.6, ottengo i seguenti […]
Spesso su SO (e altrove) ho visto l’affermazione che le note e gli esempi nello standard C ++ non sono normativi – probabilmente ho fatto questa affermazione io stesso alcune volte. Tuttavia, non sono riuscito a trovare prove di questo fatto nelle specifiche linguistiche core dello standard C ++ (al momento sto osservando il n9579 […]
Considera il seguente programma: extern int x; auto x = 42; int main() { } Clang 3.5 lo accetta ( live demo ), GCC 4.9 e VS2013 no ( demo live per il primo ). Chi ha ragione e dov’è il comportamento corretto specificato nello standard C ++?
Se consideriamo la bozza di standard C ++ sezione 5.1.2 espressioni Lambda, il paragrafo 2 dice ( enfatizza il mio futuro ): La valutazione di un’espressione lambda risulta in un valore provvisorio provvisorio (12.2). Questo temporaneo è chiamato l’object di chiusura. Un’espressione lambda non deve apparire in un operando non valutato (clausola 5). [Nota: un […]
Il problema originariamente è sorto in questa domanda . Considera il seguente codice: class Var { public: operator int () const { return 0; } template operator T () const { return T(); } }; int main() { Var v; switch (v) { } } Senza l’ operator int() const { return 0; } operator […]
È ansible acquisire mediante riferimento const in un’espressione lambda? Voglio che il compito indicato sotto non abbia esito positivo, ad esempio: #include #include #include #include using namespace std; int main() { string strings[] = { “hello”, “world” }; static const size_t num_strings = sizeof(strings)/sizeof(strings[0]); string best_string = “foo”; for_each( &strings[0], &strings[num_strings], [&best_string](const string& s) { […]