Domande taggate «c++»

C ++ è un linguaggio di programmazione generico. È stato originariamente progettato come estensione di C e ha una sintassi simile, ma ora è un linguaggio completamente diverso. Utilizzare questo tag per domande sul codice (da compilare) compilato con un compilatore C ++. Utilizzare un tag specifico della versione per domande relative a una revisione standard specifica [C ++ 11], [C ++ 14], [C ++ 17] o [C ++ 20], ecc.

4
Confronto macro if-direttiva
Perché è #ifsoddisfatta la condizione nel seguente codice: #include <iostream> #define VALUE foo int main() { #if VALUE == bar std::cout << "WORKS!" << std::endl; #endif // VALUE }


2
L'operatore std :: unordered_map [] esegue l'inizializzazione zero per chiave non esistente?
Secondo cppreference.com, std::map::operator[]per il valore inesistente non viene inizializzata zero. Tuttavia, lo stesso sito non menziona l'inizializzazione zero per std::unordered_map::operator[], tranne che ha un esempio che si basa su questo. Naturalmente questo è solo un sito di riferimento, non lo standard. Quindi, il codice qui sotto è ok o no? …

2
Inizializzatori designati in C ++ 20
Ho una domanda su una delle funzionalità di c ++ 20, inizializzatori designati (maggiori informazioni su questa funzione qui ) #include <iostream> constexpr unsigned DEFAULT_SALARY {10000}; struct Person { std::string name{}; std::string surname{}; unsigned age{}; }; struct Employee : Person { unsigned salary{DEFAULT_SALARY}; }; int main() { std::cout << std::boolalpha …

3
Il compilatore può piegare costantemente una volatile locale?
Considera questo semplice codice: void g(); void foo() { volatile bool x = false; if (x) g(); } https://godbolt.org/z/I2kBY7 Puoi vedere che gccné clangottimizzare né ottimizzare la potenziale chiamata a g. Questo è corretto nella mia comprensione: la macchina astratta è quella di supporre che le volatilevariabili possano cambiare in …

3
qual è il caso d'uso di esplicito (bool)
C ++ 20 ha introdotto esplicito (bool) che seleziona in modo condizionale in fase di compilazione se un costruttore viene reso esplicito o meno. Di seguito è riportato un esempio che ho trovato qui . struct foo { // Specify non-integral types (strings, floats, etc.) require explicit construction. template <typename …
24 c++  c++20  explicit 


1
Perché `decltype (static_cast <T> (…))` non è sempre `T`?
Per il codice seguente, passano tutte tranne l'ultima asserzione: template&lt;typename T&gt; constexpr void assert_static_cast_identity() { using T_cast = decltype(static_cast&lt;T&gt;(std::declval&lt;T&gt;())); static_assert(std::is_same_v&lt;T_cast, T&gt;); } int main() { assert_static_cast_identity&lt;int&gt;(); assert_static_cast_identity&lt;int&amp;&gt;(); assert_static_cast_identity&lt;int&amp;&amp;&gt;(); // assert_static_cast_identity&lt;int(int)&gt;(); // illegal cast assert_static_cast_identity&lt;int (&amp;)(int)&gt;(); assert_static_cast_identity&lt;int (&amp;&amp;)(int)&gt;(); // static assert fails } Perché quest'ultima asserzione fallisce e static_cast&lt;T&gt;non restituisce sempre …
24 c++  static-cast 

3
Concetti di C ++ 20: quale specializzazione di template viene scelta quando l'argomento template si qualifica per più concetti?
Dato: #include &lt;concepts&gt; #include &lt;iostream&gt; template&lt;class T&gt; struct wrapper; template&lt;std::signed_integral T&gt; struct wrapper&lt;T&gt; { wrapper() = default; void print() { std::cout &lt;&lt; "signed_integral" &lt;&lt; std::endl; } }; template&lt;std::integral T&gt; struct wrapper&lt;T&gt; { wrapper() = default; void print() { std::cout &lt;&lt; "integral" &lt;&lt; std::endl; } }; int main() { wrapper&lt;int&gt; w; …


2
Perché questa funzione modello non si comporta come previsto?
Stavo leggendo le funzioni del modello e mi sono confuso con questo problema: #include &lt;iostream&gt; void f(int) { std::cout &lt;&lt; "f(int)\n"; } template&lt;typename T&gt; void g(T val) { std::cout &lt;&lt; typeid(val).name() &lt;&lt; " "; f(val); } void f(double) { std::cout &lt;&lt; "f(double)\n"; } template void g&lt;double&gt;(double); int main() { f(1.0); …





Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.