Pertanyaan yang diberi tag «language-lawyer»

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

2
Apakah melompati inisialisasi variabel tidak terbentuk atau apakah itu menyebabkan perilaku yang tidak terdefinisi?
Pertimbangkan kode ini: void foo() { goto bar; int x = 0; bar: ; } GCC dan Dentang menolaknya , karena lompatan untuk bar:mem - bypass inisialisasi variabel. MSVC tidak mengeluh sama sekali (kecuali menggunakan xsetelah bar:menyebabkan peringatan). Kita dapat melakukan hal serupa dengan switch: void foo() { switch (0) …

1
Mengapa file standar C ++ menangani mencari seperti itu?
C ++ menggunakan streamofftipe untuk mewakili offset dalam aliran (file) dan didefinisikan sebagai berikut di [stream.types]: using streamoff = implementation-defined ; Jenis aliran adalah sinonim untuk salah satu tipe integral dasar yang ditandatangani dari ukuran yang cukup untuk mewakili ukuran file maksimum yang mungkin untuk sistem operasi. 287) 287) Biasanya …

1
Apakah Dentang benar untuk menolak kode di mana kelas bersarang dari templat kelas didefinisikan hanya melalui spesialisasi?
Diberikan templat kelas berikut: template<typename T> struct Outer { struct Inner; auto f(Inner) -> void; }; kami mendefinisikan Innersecara terpisah untuk setiap spesialisasi Outer: template<> struct Outer<int>::Inner {}; template<> struct Outer<double>::Inner {}; dan kemudian mendefinisikan fungsi anggota fsekali untuk semua spesialisasi Outer: auto Outer<T>::f(Inner) -> void { } tapi Dentang …

1
Bisakah sizeof (enum) berbeda dari sizeof (std :: underlying_type <Enum> :: type)?
Baru-baru ini muncul ulasan kode yang dalam contoh berikut: enum class A : uint8_t { VAL1, VAL2 }; ... std::vector&lt;A&gt; vOfA; // Assume this is sized and full of some stuff. std::memcpy(wire_buffer, vOfA.data(), vOfA.size() * sizeof(A)); Kita seharusnya menggunakan sizeof(std::underlying_type&lt;A&gt;::type)bukan sizeof(A). Mungkinkah ini berbeda? Apakah seseorang memiliki kutipan standar yang …


1
Bagaimana kompiler c ++ menemukan variabel eksternal?
Saya mengkompilasi program ini dengan g ++ dan clang ++. Ada perbedaan: g ++ mencetak 1, tetapi dentang ++ mencetak 2. Tampaknya g ++: extern varible didefinisikan dalam lingkup terpendek. dentang ++: variabel ekstern didefinisikan dalam ruang lingkup global terpendek. Apakah spesifikasi C ++ memiliki spesifikasi tentang itu? main.cpp #include …

2
Mengapa `std :: basic_ios` memiliki konstruktor publik?
std::basic_iosmemiliki konstruktor publik : explicit basic_ios (std::basic_streambuf&lt;CharT,Traits&gt;* sb); IMO, satu-satunya alasan bagi kelas untuk memiliki konstruktor publik adalah untuk menggunakan contoh mandiri dari kelas itu dalam suatu program. Jika suatu kelas ada hanya untuk memiliki kelas lain turun dari itu (seperti yang tampaknya terjadi basic_ios), semua konstruktor kelas harus protected. …


1
Mengapa optimasi basis kosong dilarang ketika kelas dasar kosong juga merupakan variabel anggota?
Optimasi basis kosong sangat bagus. Namun, ia datang dengan batasan berikut: Optimalisasi basis kosong dilarang jika salah satu kelas basis kosong juga merupakan tipe atau basis tipe anggota data non-statis pertama, karena dua sub-objek dasar dari tipe yang sama diharuskan memiliki alamat yang berbeda dalam representasi objek dari tipe yang …


1
Apakah ini bug di std :: gcd?
Saya menemukan perilaku std::gcdyang tidak terduga ini: #include &lt;iostream&gt; #include &lt;numeric&gt; int main() { int a = -120; unsigned b = 10; //both a and b are representable in type C using C = std::common_type&lt;decltype(a), decltype(b)&gt;::type; C ca = std::abs(a); C cb = b; std::cout &lt;&lt; a &lt;&lt; ' ' …

2
Mengapa kita tidak dapat membuat objek yang dapat dibangun dengan menggunakan malloc jika konstruktor standar sepele tidak melakukan tindakan?
Saya mengalami kesulitan dalam memahami paragraf berikut yang dikutip dari cppreference tentang konstruktor standar sepele. Saya telah mencari stackoverflow tetapi masih belum mendapatkan jawaban yang jelas. Jadi tolong bantu. Konstruktor default sepele adalah konstruktor yang tidak melakukan tindakan. Semua tipe data yang kompatibel dengan bahasa C (tipe POD) sepele-standar dibangun. …


4
Apakah penjelasan tentang pemesanan yang santai salah dalam preferensi?
Dalam dokumentasi std::memory_orderdi cppreference.com ada contoh pemesanan santai: Pemesanan santai Operasi atom yang ditandai memory_order_relaxedbukan operasi sinkronisasi; mereka tidak memaksakan urutan di antara akses memori bersamaan. Mereka hanya menjamin konsistensi urutan atomitas dan modifikasi. Misalnya, dengan x dan y awalnya nol, // Thread 1: r1 = y.load(std::memory_order_relaxed); // A x.store(r1, …

2
jika constexpr dengan static_assert di lambda, kompiler mana yang benar?
Ketika kita ingin menggunakan static_assertdalam if constexprkita harus membuat kondisi tergantung pada beberapa parameter template. Menariknya, gcc dan dentang tidak setuju ketika kode tersebut dibungkus dengan lambda. Kode berikut dikompilasi dengan gcc, tetapi dentang memicu pernyataan, bahkan jika itu if constexprtidak benar. #include &lt;utility&gt; template&lt;typename T&gt; constexpr std::false_type False; template&lt;typename …

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.