«language-lawyer» etiketlenmiş sorular

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

2
C'nin BNF dilbilgisi neden boş bir init-declarator dizisi içeren bildirimlere izin veriyor?
C'nin BNF gramerine bakarken, bir deklarasyon için üretim kuralının böyle görünmesinin garip olduğunu düşündüm ( https://cs.wmich.edu/~gupta/teaching/cs4850/sumII06/The%20syntax%20of% uyarınca 20C% 20in% 20Backus-Naur% 20form.htm ): <declaration> ::= {<declaration-specifier>}+ {<init-declarator>}* ; Neden bir *nicelik belirteci (sıfır veya daha fazla tekrarlama anlamına gelir) init-declarator? Bu, anlamsal olarak geçersiz olmalarına rağmen int;veya gibi ifadelerin void;sözdizimsel olarak …

2
Neden std :: hash 'in deterministik olduğu garanti edilmiyor?
Bundan böyle N4140 (C ++ 14 Standard) kullanacağız . Göre 17.6.3.4 Hash gereksinimlerini § , Döndürülen değer yalnızca tartışmaya bağlı olacaktır k programın süresine ilişkin . [Not: Böylece h(k)aynı değer için ifadenin tüm değerlendirmeleri kaynı sonucu verir , programın belirli bir yürütülmesi için verir . - son not] ve § …



3
Bir dönüşüm operatörünün bu aşırı yüklenmesi neden seçildi?
Aşağıdaki kodu düşünün . struct any { template <typename T> operator T &&() const; template <typename T> operator T &() const; }; int main() { int a = any{}; } Burada ikinci dönüştürme operatörü aşırı yük çözünürlüğü ile seçilir. Neden? Anladığım kadarıyla, iki operatör sırasıyla operator int &&() constve hesabından …

3
Sabit bağımsız değişkenin değerini const referansı ile döndürmek uygun mudur?
Aşağıdaki örneklerde olduğu gibi const referansıyla varsayılan bağımsız değişkenin değerini döndürmek uygun mudur: 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
C ile çakışan nesnelerin semantiği nedir?
Aşağıdaki yapıyı düşünün: struct s { int a, b; }; Tipik olarak 1 , bu yapı 8 ebatına ve 4 hizalamasına sahip olacaktır. Ya iki struct snesne yaratırsak (daha kesin olarak, tahsis edilen depoya bu tür iki nesneyi yazarız), ikinci nesne birinciyle çakışırsa? char *storage = malloc(3 * sizeof(struct s)); …

3
Derleyicinin yerel bir uçucuyu sabit olarak katlamasına izin veriliyor mu?
Şu basit kodu düşünün: void g(); void foo() { volatile bool x = false; if (x) g(); } https://godbolt.org/z/I2kBY7 Potansiyel çağrıyı ne görebilir, ne gccde clangoptimize edebilirsiniz g. Bu benim anlayışım için doğru: Soyut makine volatiledeğişkenlerin herhangi bir anda değişebileceğini varsaymaktır (örneğin donanım eşlemeli olması nedeniyle), bu nedenle falsebaşlatmayı ifkontrole …

2
modül arayüzlerinde satır içi anlam
Başlık dosyasını düşünün: class T { private: int const ID; public: explicit T(int const ID_) noexcept : ID(ID_) {} int GetID() const noexcept { return ID; } }; Veya alternatif olarak: class T { private: int const ID; public: explicit T(int const ID_) noexcept; int GetID() const noexcept; }; inline …

3
C ++ 20 Kavramlar: Şablon bağımsız değişkeni birden çok kavram için uygun olduğunda hangi şablon uzmanlığı seçilir?
Verilen: #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; …

3
Lambda fonksiyonunun değişken değişkenin bir referanstan global değişkene davranış davranışı farkı
Mutable anahtar kelime ile küresel değişkene bir referans yakalamak için bir lambda kullanır ve sonra lambda işlevindeki değeri değiştirmek sonuçları derleyiciler arasında farklı bulundu. #include <stdio.h> #include <functional> int n = 100; std::function<int()> f() { int &m = n; return [m] () mutable -> int { m += 123; return …


2
POD türü olmak önemsiz, standart düzen türüne tam olarak eşdeğer mi?
C ++ 20'de, POD kavramı, varsayılan ve önemsiz olmanın anlamsız bir kompozit özelliği olduğu için kullanımdan kaldırılmıştır. Bununla birlikte, C ++ 20 taslağındaki POD'un tanımı tam olarak "hem önemsiz hem de standart düzen" değildir; aslında: POD sınıfı, hem önemsiz bir sınıf hem de standart mizanpaj sınıfı olan ve POD sınıfı …



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.