Pertanyaan yang diberi tag «language-lawyer»

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

3
Apakah boleh mengembalikan nilai argumen default dengan referensi const?
Apakah boleh mengembalikan nilai argumen default dengan referensi const seperti pada contoh di bawah ini: https://coliru.stacked-crooked.com/a/ff76e060a007723b #include <string> const std::string& foo(const std::string& s = std::string("")) { return s; } int main() { const std::string& s1 = foo(); std::string s2 = foo(); const std::string& s3 = foo("s"); std::string s4 = foo("s"); …

1
Apa semantik objek yang tumpang tindih di C?
Pertimbangkan struct berikut: struct s { int a, b; }; Biasanya 1 , struct ini akan memiliki ukuran 8 dan alignment 4. Bagaimana jika kita membuat dua struct sobjek (lebih tepatnya, kita menulis ke dalam penyimpanan yang dialokasikan dua objek tersebut), dengan objek kedua tumpang tindih yang pertama? char *storage …


2
makna inline dalam antarmuka modul
Pertimbangkan file tajuk: class T { private: int const ID; public: explicit T(int const ID_) noexcept : ID(ID_) {} int GetID() const noexcept { return ID; } }; atau, sebagai alternatif: class T { private: int const ID; public: explicit T(int const ID_) noexcept; int GetID() const noexcept; }; inline …

3
C ++ 20 Konsep: Spesialisasi templat mana yang dipilih ketika argumen templat memenuhi syarat untuk beberapa konsep?
Diberikan: #include <concepts> #include <iostream> template<class T> struct wrapper; template<std::signed_integral T> struct wrapper<T> { wrapper() = default; void print() { std::cout << "signed_integral" << std::endl; } }; template<std::integral T> struct wrapper<T> { wrapper() = default; void print() { std::cout << "integral" << std::endl; } }; int main() { wrapper<int> w; …


1
Penggunaan variabel dalam initializer sendiri
[basic.scope.pdecl] / 1 dari draft standar C ++ 20 memiliki contoh (non-normatif) berikut dalam catatan (kutipan parsial dari sebelum permintaan tarik gabungan 3580 , lihat jawaban untuk pertanyaan ini): unsigned char x = x; [...] x diinisialisasi dengan nilainya sendiri (tidak ditentukan). Apakah ini sebenarnya memiliki perilaku yang didefinisikan dengan …

3
Apakah deleter shared_ptr disimpan di memori dialokasikan oleh pengalokasi khusus?
Katakanlah saya punya shared_ptrdengan pengalokasi khusus dan deleter khusus. Saya tidak dapat menemukan apa pun dalam standar yang berbicara tentang di mana deleter harus disimpan: ia tidak mengatakan bahwa pengalokasi kustom akan digunakan untuk memori deleter, dan tidak mengatakan bahwa itu tidak akan terjadi. Apakah ini tidak ditentukan atau saya …


2
Properti pointer ke array panjang nol
Mempertimbangkan int main() { auto a = new int[0]; delete[] a; // So there's no memory leak } Di antara inisialisasi dan penghapusan salinan, apakah Anda diizinkan membaca pointer di a + 1? Selanjutnya, apakah bahasa mengizinkan compiler untuk set ake nullptr?

4
Konversi tersirat tidak diizinkan untuk dikembalikan
#include <optional> bool f() { std::optional<int> opt; return opt; } Tidak mengkompilasi: 'return': cannot convert from 'std::optional<int>' to 'bool' Referensi konsultasi Saya akan berpikir untuk menemukan penjelasan, tetapi saya membacanya sebagaimana mestinya ok. Konversi tersirat dilakukan setiap kali ekspresi dari beberapa tipe T1 digunakan dalam konteks yang tidak menerima tipe …

1
Mengapa {} sebagai argumen fungsi tidak mengarah pada ambiguitas?
Pertimbangkan kode ini: #include <vector> #include <iostream> enum class A { X, Y }; struct Test { Test(const std::vector<double>&, const std::vector<int>& = {}, A = A::X) { std::cout << "vector overload" << std::endl; } Test(const std::vector<double>&, int, A = A::X) { std::cout << "int overload" << std::endl; } }; int …

4
Apakah valid menggunakan std :: transform with std :: back_inserter?
Cppreference memiliki kode contoh ini untuk std::transform: std::vector<std::size_t> ordinals; std::transform(s.begin(), s.end(), std::back_inserter(ordinals), [](unsigned char c) -> std::size_t { return c; }); Tetapi juga dikatakan: std::transformtidak menjamin aplikasi unary_opatau binary_op. Untuk menerapkan fungsi ke urutan secara berurutan atau menerapkan fungsi yang memodifikasi elemen urutan, gunakan std::for_each. Ini mungkin untuk memungkinkan implementasi …


2
Panah (->) prioritas / prioritas operator terendah, atau prioritas penugasan / tugas gabungan terendah?
JLS : The Operator didahulukan terendah adalah panah dari ekspresi lambda (->) , diikuti oleh operator penugasan. Diikuti ke arah mana (meningkatkan prioritas, mengurangi prioritas)? - "mengikuti" berarti penugasan memiliki prioritas lebih tinggi atau prioritas lebih rendah (berkenaan dengan operator panah)? Saya kira, dalam peningkatan, karena "terendah" (untuk panah) berarti …

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.