«language-lawyer» etiketlenmiş sorular

Programlama dillerinin ve ortamlarının resmi veya yetkili teknik özelliklerinin karmaşıklığı hakkındaki sorular için.

1
Bu std :: gcd bir hata mı?
Ben std::gcdbeklenmedik buldum bu davranış karşılaştım : #include <iostream> #include <numeric> int main() { int a = -120; unsigned b = 10; //both a and b are representable in type C using C = std::common_type<decltype(a), decltype(b)>::type; C ca = std::abs(a); C cb = b; std::cout << a << ' ' …

2
Önemsiz varsayılan yapıcı herhangi bir işlem yapmazsa neden malloc kullanarak önemsiz olarak oluşturulabilir nesneler oluşturamıyoruz?
Önemsiz varsayılan yapıcı hakkında cppreference alıntı yapılan aşağıdaki paragraf anlamakta zorlanıyorum . Stackoverflow aradım ama hala net bir cevap alamadım. Lütfen yardım edin. Önemsiz bir varsayılan kurucu, hiçbir eylem gerçekleştirmeyen bir kurucudur. C dili ile uyumlu tüm veri türleri (POD türleri) önemsiz şekilde varsayılan olarak yapılandırılabilir. Bununla birlikte, C'den farklı …


4
Rahat sipariş açıklaması açıklamada yanlış mı?
In belgelenmesi std::memory_ordercppreference.com üzerinde rahat sipariş örneği vardır: Rahat sipariş Etiketlenen atomik işlemler memory_order_relaxedsenkronizasyon işlemleri değildir; eşzamanlı bellek erişimleri arasında emir vermezler. Sadece atomisite ve modifikasyon sırası tutarlılığını garanti ederler. Örneğin, başlangıçta x ve y ile sıfır, // Thread 1: r1 = y.load(std::memory_order_relaxed); // A x.store(r1, std::memory_order_relaxed); // B // …

2
lambda'da static_assert ile constexpr varsa, hangi derleyici doğrudur?
Biz kullanmak istediğinizde static_assertbir de if constexprbazı şablon parametresine durum bağımlı yapmak zorundadır. İlginç bir şekilde, gcc ve clang, kod bir lambda içine sarıldığında katılmıyor. Aşağıdaki kod gcc ile derlenir, ancak clang if constexprdoğru olamazsa bile iddiayı tetikler . #include <utility> template<typename T> constexpr std::false_type False; template<typename T> void foo() …


1
Bitişik üyelerin sınıflarda çakışmasını ne önler?
Aşağıdaki üçü düşünün struct: class blub { int i; char c; blub(const blub&) {} }; class blob { char s; blob(const blob&) {} }; struct bla { blub b0; blob b1; }; int4 bayt olan tipik platformlarda , boyutlar, hizalamalar ve toplam dolgu 1 aşağıdaki gibidir: struct size alignment padding …

1
A -> () fonksiyonunun Haskell'de değerlendirilmesinde hangi kurallar vardır?
Tıpkı başlığın dediği gibi: Haskell fonksiyon geri dönen birimin değerlendirilmesi için ne gibi garantiler var? Böyle bir durumda herhangi bir değerlendirme yapmaya gerek olmadığını düşünebiliriz, ()açık bir kesinlik talebi olmadığı sürece derleyici bu tür tüm çağrıları hemen bir değerle değiştirebilir , bu durumda kodun gerekip gerekmediğine karar vermesi gerekebilir dönüş …


4
Boolean olmayan dönüş değeri ile eşitlik karşılaştırması aşırı yüklenirken C ++ 20'de değişiklik mi yoksa clang-trunk / gcc-trunk'ta gerileme mi?
Aşağıdaki kod c ++ 17 modunda clang-trunk ile iyi derler, ancak c ++ 2a (yaklaşan c ++ 20) modunda kırılır: // Meta struct describing the result of a comparison struct Meta {}; struct Foo { Meta operator==(const Foo&) {return Meta{};} Meta operator!=(const Foo&) {return Meta{};} }; int main() { Meta …

1
GCC'nin köşeli parantez uygulaması içerir. Neden aşağıda açıklandığı gibi olmalıdır?
2.6 Bilgisayarlı İçindekiler bölümündeki bu belge aşağıdaki paragrafa sahiptir: Çizgi, bir <belirteciyle başlayan ve bir> belirtecini içeren bir belirteç akışına genişlerse, eklenecek dosya adını oluşturmak için <ve ilk> arasındaki belirteçler birleştirilir. Jetonlar arasındaki boşluklar tek bir alana indirgenir; ilk <boşluktan sonraki herhangi bir boşluk korunur, ancak kapanmadan önceki boşluk> yok …
11 c++  c  gcc  language-lawyer 

1
Derleyici, ilişkisiz bir arabirim türüyle çağrıldığında neden bu genel yöntemi bir sınıf türü parametresiyle seçiyor?
Aşağıdaki iki sınıfı ve arayüzü düşünün: public class Class1 {} public class Class2 {} public interface Interface1 {} Neden ikinci çağrı için gelmez mandatoryile aşırı yöntemi çağırmak Class2, eğer getInterface1ve Interface1hiçbir ilişkisi var Class2? public class Test { public static void main(String[] args) { Class1 class1 = getClass1(); Interface1 interface1 …

2
T'nin std :: declval <T> `de kullanılacak tam bir tür olması gerekir mi?
Bu örneği düşünün ( buradan geliyor ): #include &lt;type_traits&gt; #include &lt;iostream&gt; template &lt;typename U&gt; struct A { }; struct B { template &lt;typename F = int&gt; A&lt;F&gt; f() { return A&lt;F&gt;{}; } using default_return_type = decltype(std::declval&lt;B&gt;().f()); }; int main() { B::default_return_type x{}; std::cout &lt;&lt; std::is_same&lt; B::default_return_type, A&lt;int&gt;&gt;::value; } Bu gcc9.2 …

2
C ++ şablon şablonu bağımsız değişken türleri kesinti
Ben bulur ve dizeleri konteyner üzerinde gidiyor gibi bir desen maçlar yazdırır kodu var. Baskı işlevi gerçekleştirilir foo şablonlu edilir Kod #include &lt;iostream&gt; #include &lt;algorithm&gt; #include &lt;iterator&gt; #include &lt;vector&gt; #include &lt;string&gt; #include &lt;tuple&gt; #include &lt;utility&gt; template&lt;typename Iterator, template&lt;typename&gt; class Container&gt; void foo(Iterator first, Container&lt;std::pair&lt;Iterator, Iterator&gt;&gt; const &amp;findings) { for (auto …

1
CHAR_MAX değerine göre bir char değerinin CHAR_MIN değerine çevrilmesi garanti ediliyor mu?
Kodum: #include &lt;stdio.h&gt; #include &lt;limits.h&gt; int main() { char c = CHAR_MAX; c += 1; printf("CHAR_MIN=%d CHAR_MAX=%d c=%d (%c)\n", CHAR_MIN, CHAR_MAX, c, c); } Çıktı: CHAR_MIN=-128 CHAR_MAX=127 c=-128 () Bir chardeğişken setini artırdığımızda, değişkenin CHAR_MAXetrafına sarıldığını görürüz CHAR_MIN. Bu davranış garanti ediliyor mu? Yoksa tanımlanmamış davranış mı yoksa uygulama tarafından …

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.