«c++» etiketlenmiş sorular

C ++ genel amaçlı bir programlama dilidir. Başlangıçta C'nin bir uzantısı olarak tasarlanmıştır ve benzer bir sözdizimine sahiptir, ancak şimdi tamamen farklı bir dildir. Bir C ++ derleyicisiyle derlenecek kod (sorulacak) ile ilgili sorular için bu etiketi kullanın. Belirli bir standart revizyon [C ++ 11], [C ++ 14], [C ++ 17] veya [C ++ 20] vb. İle ilgili sorular için sürüme özgü bir etiket kullanın.

4
Void * function () işlev için bir işaretçi mi yoksa void * döndüren bir işlev mi?
Anlamı hakkında kafam karıştı void *function(). Bir işaretçi void*mi, yoksa dönen bir fonksiyon mu? Ben her zaman bir işaretçi dönen özyinelemeli bir işlev olarak veri yapıları üzerinde kullandım, ama ben multithreading ( pthread) bir kod gördüğümde aynı işlev bildirimi vardır. Şimdi aralarındaki farkın ne olduğunu karıştırıyorum.



2
Std :: unordered_map operatörü [] mevcut olmayan anahtar için sıfır başlatma yapıyor mu?
Cppreference.com'a göre, varolmayan std::map::operator[]değer sıfır başlatma yapar. Bununla birlikte, aynı site buna sıfır sıfırlamadan bahsetmez std::unordered_map::operator[], ancak buna dayanan bir örnek yoktur. Tabii ki bu sadece bir referans sitesi, standart değil. Peki, aşağıdaki kod tamam mı değil mi? #include <unordered_map> int main() { std::unordered_map<int, int> map; return map[42]; // is …

2
C ++ 20'de belirtilen başlatıcılar
Başlatıcılar olarak belirlenmiş c ++ 20 özelliğinden biriyle ilgili bir sorum var (bu özellik hakkında daha fazla bilgi burada ) #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
Derleyicinin yerel bir uçucuyu sabit olarak katlamasına izin veriliyor mu?
Şu basit kodu düşünün: void g(); void foo() { volatile bool x = false; if (x) g(); } https://godbolt.org/z/I2kBY7 Potansiyel çağrıyı ne görebilir, ne gccde clangoptimize edebilirsiniz g. Bu benim anlayışım için doğru: Soyut makine volatiledeğişkenlerin herhangi bir anda değişebileceğini varsaymaktır (örneğin donanım eşlemeli olması nedeniyle), bu nedenle falsebaşlatmayı ifkontrole …

4
Genel bir bağımsız değişken olarak belirli bir türe sahip STL kapsayıcısı
Ben std::stringparametre olarak belirli bir tip (diyelim ) ile bir kap alır bir işlevi yapmak herhangi bir yolu var mı void foo(const std::container<std::string> &cont) { for(std::string val: cont) { std::cout << val << std::endl; } } ve her stl konteyneri için girdi olarak çağır? yukarıdaki gibi? std::set<std::string> strset; std::vector<std::string> strvec; …

3
müstehcen (bool)
C ++ 20, bir kurucunun açık yapılıp yapılmadığını koşullu olarak derleme zamanında seçen açık (bool) tanıtır . Aşağıda burada bulduğum bir örnek var . struct foo { // Specify non-integral types (strings, floats, etc.) require explicit construction. template <typename T> explicit(!std::is_integral_v<T>) foo(T) {} }; foo a = 123; // OK …
24 c++  c++20  explicit 

2
modül arayüzlerinde satır içi anlam
Başlık dosyasını düşünün: class T { private: int const ID; public: explicit T(int const ID_) noexcept : ID(ID_) {} int GetID() const noexcept { return ID; } }; Veya alternatif olarak: class T { private: int const ID; public: explicit T(int const ID_) noexcept; int GetID() const noexcept; }; inline …

1
Neden "decltype (static_cast <T> (…))" her zaman "T" değil?
Aşağıdaki kod için, son iddia hariç tümü geçer: 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 } Bu son iddia neden başarısız oluyor ve static_cast&lt;T&gt;her zaman …
24 c++  static-cast 

3
C ++ 20 Kavramlar: Şablon bağımsız değişkeni birden çok kavram için uygun olduğunda hangi şablon uzmanlığı seçilir?
Verilen: #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
Bu şablon işlevi neden beklendiği gibi davranmıyor?
Şablon işlevleri hakkında okuyordum ve bu sorunla karıştım: #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); // f(double) f(1); // f(int) …

1
Neden c ++ sınıfının boyutu veri üyelerinin genel / özel durumuna bağlıdır?
Bildiğim kadarıyla, c ++ 'da bir sınıfın boyutu aşağıdaki faktörlere bağlıdır - Statik olmayan tüm veri üyelerinin boyutu. Veri üyelerinin sırası. Bayt dolgusu etkin veya etkin değilse. Temel taban sınıfının büyüklüğü. Sanal fonksiyonların varlığı. Kalıtım modu (sanal kalıtım). Şimdi aşağıdaki gibi 2 sınıf oluşturdum - class A{ int a; short …

1
Bir işlev parametresi için şablon bağımsız değişken yer tutucu olarak 'otomatik'
C ++ 20 autoişlev parametre türü için kullanılmasına izin verir . Aynı zamanda kullanılmasına izin mu autobir şablon bağımsız değişken tutucu olarak (benzer, ama ruhunda C ++ 17 şablon &lt;oto&gt; bir şekilde) işlev parametre tipleri için? Yani aşağıdaki kod, C ++ 20 öncesi: template&lt;typename First, typename Second&gt; void printPair(const std::pair&lt;First, …
22 c++  templates  auto  c++20 

3
Lambda fonksiyonunun değişken değişkenin bir referanstan global değişkene davranış davranışı farkı
Mutable anahtar kelime ile küresel değişkene bir referans yakalamak için bir lambda kullanır ve sonra lambda işlevindeki değeri değiştirmek sonuçları derleyiciler arasında farklı bulundu. #include &lt;stdio.h&gt; #include &lt;functional&gt; int n = 100; std::function&lt;int()&gt; f() { int &amp;m = n; return [m] () mutable -&gt; int { m += 123; return …

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.