«language-lawyer» etiketlenmiş sorular

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

3
Farklı derleyicilerde C ++ ve C arasındaki işaretsiz bitfield tamsayı ifadelerinin tutarsız kesilmesi
Düzenle 2 : Bir işlev daha önce bir C ++ kaynak dosyasında bulunan ancak bir C dosyasına kelimesi kelimesine taşındığında, yanlış sonuçlar döndürmeye başladığında garip bir test hatası ayıklama. Aşağıdaki MVE, sorunun GCC ile yeniden üretilmesine izin verir. Ancak, bir hevesle, örneği Clang ile (ve daha sonra VS ile) derlediğimde, …

1
Özellik varsayılan değeri üzerinden ilişki değiştirilmeye çalışılırken beklenmeyen InvalidOperationException
Aşağıdaki örnek kod yaparken ben aşağıdaki istisna olsun db.Entry(a).Collection(x => x.S).IsModified = true: System.InvalidOperationException: '' {Id: 0} 'anahtar değerine sahip başka bir örnek zaten izlendiği için' B 'varlık türü örneği izlenemiyor. Mevcut varlıkları eklerken, verilen anahtar değerine sahip yalnızca bir varlık örneğinin eklendiğinden emin olun. B örneklerini eklemek yerine neden …


1
İkinci bir impl eklemek neden argümanın kayıttan kaldırılmasını engelliyor?
Impl'yi Add<char> for Stringstandart kütüphaneye eklemeye çalışırken bu sorunla karşılaştım . Ancak operatör maskaralıkları olmadan kolayca çoğaltabiliriz. Bununla başlıyoruz: trait MyAdd<Rhs> { fn add(self, rhs: Rhs) -> Self; } impl MyAdd<&str> for String { fn add(mut self, rhs: &str) -> Self { self.push_str(rhs); self } } Yeterince basit. Bununla, aşağıdaki …

1
“Daha önce güçlü bir şekilde gerçekleşir” ne anlama geliyor?
"Daha önce kesinlikle olur" ifadesi C ++ taslak standardında birkaç kez kullanılır. Örneğin: Fesih [basic.start.term] / 5 Stad saklama süresi olan bir nesnenin başlatılmasının tamamlanması, std :: atexit çağrısından önce gerçekleşirse (bkz., [Support.start.term]), std :: atexit işlevine yapılan çağrı nesnenin yıkıcısına yapılan çağrıdan önce sıralanır. Stad depolama süresine sahip bir …

2
Boş gösterici argümanı ve imkansız son koşullar ile standart istisnalar oluşturun
Aşağıdaki programı düşünün: #include<stdexcept> #include<iostream> int main() { try { throw std::range_error(nullptr); } catch(const std::range_error&) { std::cout << "Caught!\n"; } } GCC ve Clang ile libstdc ++ çağrı std::terminateve mesaj ile programı iptal terminate called after throwing an instance of 'std::logic_error' what(): basic_string::_S_construct null not valid İstisna yapımında libc ++ …

1
Ömrü sona eren bir nesnenin üye işlev programına devam etmek UB mi?
Bu soru şu yorumdan kaynaklanıyor: C ++ 20 programları için Lambda ömür boyu açıklama bu örnekle ilgili olarak: auto foo() -> folly::coro::Task<int> { auto task = []() -> folly::coro::Task<int> { co_return 1; }(); return task; } Yani soru, geri dönen koroutinin yürütülmesinin fooUB ile sonuçlanıp sonuçlanmayacağıdır. Bir üye işlevini "çağırma" …

1
Belirsiz Örtülü Nesne Oluşturma
Yana düşük seviyeli nesne manipülasyonu için nesnelerin P0593 Örtülü oluşturulması kabul edilmiştir, nesneler artık oluşturulabilir dolaylı 20 C ++. Özellikle önerisi getirdiği ifade (örneğin belirli operasyonlar verir std::mallocotomatik olarak) belirli tipte nesnelerin ömrünü, sözde oluşturmak ve başlatmak örtük-ömür türleri , eğer böyle nesnelerin tanıtımı için aksi tanımsız davranışı ile bir …

2
Neden C ++, Foo <T> :: Foo (T&&) çağrısında T'yi çıkaramaz?
Aşağıdaki şablon yapısı göz önüne alındığında: template&lt;typename T&gt; struct Foo { Foo(T&amp;&amp;) {} }; Bu derlenir ve Tşu şekilde çıkarılır int: auto f = Foo(2); Ancak bu derlenmez: https://godbolt.org/z/hAA9TE int x = 2; auto f = Foo(x); /* &lt;source&gt;:12:15: error: no viable constructor or deduction guide for deduction of template …


1
sınıf uzmanlığında clang / gcc tutarsızlığı
Ben yapılandırılmış bağlama için C ++ 17 özel bir sınıf tuple_size/ uzmanlaşmaya çalışırken bu sorunla karşılaştım tuple_element. Aşağıdaki kod GCC'de derlenir, ancak clang'da değil (her iki gövde sürümü, aşağıdaki bağlantıya bakın). #include &lt;type_traits&gt; template&lt;typename T, typename... Ts&gt; using sfinae_t = T; template&lt;typename T, bool... Bs&gt; using sfinae_v_t = sfinae_t&lt;T, typename …

2
Punning türü yazın: yerinde önemsiz yapı
Bunun oldukça yaygın bir konu olduğunu biliyorum, ancak tipik UB'nin bulunması kolay olduğu kadarıyla, bu varyantı bulamadım. Yani, verilerin gerçek bir kopyasını kaçınarak resmi olarak Pixel nesnelerini tanıtmaya çalışıyorum. Bu geçerli mi? struct Pixel { uint8_t red; uint8_t green; uint8_t blue; uint8_t alpha; }; static_assert(std::is_trivial_v&lt;Pixel&gt;); Pixel* promote(std::byte* data, std::size_t count) …

1
Eksik bir türün işaretçisi eksik olabilir mi?
Can int (*)[]tamamlanmamış bir tür olabilir mi? C 2018 6.2.5 1 diyor ki: Bir çeviri birimindeki çeşitli noktalarda bir nesne türü eksik (o türdeki nesnelerin boyutunu belirlemek için yeterli bilgiye sahip olmayabilir ) veya tam (yeterli bilgiye sahip) olabilir. Dolayısıyla, bir türün boyutu biliniyorsa, türün tamamlanmış olduğu görülmektedir. 6.2.6.1 28, …


1
Şablonları ve isim aramayı anlamaya çalışmak
Aşağıdaki kod parçacıklarını anlamaya çalışıyorum Snippet # 1 template &lt;typename T&gt; struct A { static constexpr int VB = T::VD; }; struct B : A&lt;B&gt; { }; Ne gcc9 ne de clang9 buraya bir hata atmıyor. S. Bu kod neden derleniyor? A&lt;B&gt;B'den miras alırken somutlaşmıyor muyuz ? B'de VD yoktur, …
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.