Pertanyaan yang diberi tag «language-lawyer»

Untuk pertanyaan tentang seluk-beluk spesifikasi bahasa dan lingkungan pemrograman formal atau otoritatif





4
Melanggar perubahan dalam C ++ 20 atau regresi dalam dentang-trunk / gcc-trunk saat membebani perbandingan kesetaraan dengan nilai pengembalian non-Boolean?
Kode berikut mengkompilasi baik-baik saja dengan dentang-trunk dalam mode c ++ 17 tetapi istirahat dalam mode c ++ 2a (mendatang c ++ 20): // 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 …


1
Mengapa kompiler memilih metode generik ini dengan parameter tipe kelas ketika dipanggil dengan tipe antarmuka yang tidak terkait?
Pertimbangkan dua kelas dan antarmuka berikut: public class Class1 {} public class Class2 {} public interface Interface1 {} Mengapa panggilan kedua untuk mandatorymemanggil metode kelebihan beban dengan Class2, jika getInterface1dan Interface1tidak memiliki hubungan dengan Class2? public class Test { public static void main(String[] args) { Class1 class1 = getClass1(); Interface1 …

2
Apakah T harus merupakan tipe yang lengkap untuk digunakan dalam `std :: declval <T>`?
Pertimbangkan contoh ini (datang dari sini ): #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; } Ini mengkompilasi …

2
Pengurangan tipe argumen template templat C ++
Saya memiliki kode yang menemukan dan mencetak kecocokan suatu pola ketika melewati wadah string. Pencetakan dilakukan dalam fungsi foo yang templated Kode #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 …

1
Apakah nilai char diatur ke CHAR_MAX dijamin untuk membungkus CHAR_MIN?
Kode saya: #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); } Keluaran: CHAR_MIN=-128 CHAR_MAX=127 c=-128 () Kita melihat bahwa ketika kita menambah charset variabel ke CHAR_MAX, itu membungkus sekitar CHAR_MIN. Apakah perilaku ini dijamin? Atau apakah …

3
Pemotongan yang tidak konsisten dari ekspresi integer bitfield yang tidak ditandatangani antara C ++ dan C dalam kompiler yang berbeda
Edit 2 : Saya sedang men-debug kegagalan pengujian aneh ketika fungsi yang sebelumnya berada di file sumber C ++ tetapi pindah ke file C kata demi kata, mulai mengembalikan hasil yang salah. MVE di bawah ini memungkinkan untuk mereproduksi masalah dengan GCC. Namun, ketika saya, dengan hati-hati, mengkompilasi contoh dengan …

1
InvalidOperationException yang tidak terduga saat mencoba mengubah hubungan melalui nilai default properti
Dalam kode contoh di bawah ini saya mendapatkan pengecualian berikut saat melakukan db.Entry(a).Collection(x =&gt; x.S).IsModified = true: System.InvalidOperationException: 'Instance dari tipe entitas' B 'tidak dapat dilacak karena instance lain dengan nilai kunci' {Id: 0} 'sudah dilacak. Saat melampirkan entitas yang ada, pastikan bahwa hanya satu instance entitas dengan nilai kunci …


1
Mengapa menambahkan imp kedua mencegah paksaan deref argumen?
Saya menemukan masalah ini ketika mencoba menambahkan alat Add&lt;char&gt; for Stringke perpustakaan standar. Tapi kita bisa meniru itu dengan mudah, tanpa operator shenanigans. Kita mulai dengan ini: trait MyAdd&lt;Rhs&gt; { fn add(self, rhs: Rhs) -&gt; Self; } impl MyAdd&lt;&amp;str&gt; for String { fn add(mut self, rhs: &amp;str) -&gt; Self { …

2
Bangun pengecualian standar dengan argumen penunjuk nol dan kondisi akhir yang tidak mungkin
Pertimbangkan program berikut: #include&lt;stdexcept&gt; #include&lt;iostream&gt; int main() { try { throw std::range_error(nullptr); } catch(const std::range_error&amp;) { std::cout &lt;&lt; "Caught!\n"; } } GCC dan Dentang dengan libstdc ++ panggilan std::terminatedan batalkan program dengan pesan terminate called after throwing an instance of 'std::logic_error' what(): basic_string::_S_construct null not valid Dibatasi dengan libc ++ …

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.