«language-lawyer» etiketlenmiş sorular

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


2
Roslyn'de neden zaman uyumsuz durum makineleri sınıfları (yapılar değil) var?
Bu çok basit eşzamansız yöntemi ele alalım: static async Task myMethodAsync() { await Task.Delay(500); } Bunu VS2013 (Roslyn öncesi derleyici) ile derlediğimde, üretilen durum makinesi bir yapıdır. private struct <myMethodAsync>d__0 : IAsyncStateMachine { ... void IAsyncStateMachine.MoveNext() { ... } } VS2015 (Roslyn) ile derlediğimde üretilen kod şudur: private sealed class …

6
Referanslar neden C ++ 'da "const" değil?
Bir "const değişkeni" nin atandıktan sonra değişkeni şu şekilde değiştiremeyeceğinizi gösterdiğini biliyoruz: int const i = 1; i = 2; Yukarıdaki program derlenemez; gcc bir hata ile sorar: assignment of read-only variable 'i' Sorun değil, anlayabiliyorum, ancak aşağıdaki örnek anlayışımın ötesinde: #include<iostream> using namespace std; int main() { boolalpha(cout); int …



2
std :: yapılandırılmış bağlamalarla yoksayılsın mı?
Başlangıç: std::tuple<int, int, int> f(); std::tuple<int, int, float, int> g(); C ++ 1z, yapılandırılmış bağlamalar için sözdizimi sunacak ve bunun yerine yazmayı mümkün kılacaktır. int a, b, c; std::tie(a, b, c) = f(); gibi bir şey auto [a, b, c] = f(); Bununla birlikte, belirli bileşenlerin yok sayılmasına std::tieda izin …

4
Tanımlanmamış davranış içeren kaynak kodun derleyiciyi çökertmesi yasal mı?
Diyelim ki tanımlanmamış bir davranışı çağıran kötü yazılmış C ++ kaynak kodunu derlemeye gittiğimi ve bu nedenle (dedikleri gibi) "her şey olabilir" diyelim. C ++ dil spesifikasyonunun bir "uyumlu" derleyicide kabul edilebilir gördüğü bakış açısından, bu senaryoda "herhangi bir şey" derleyicinin çökmesini (veya parolalarımı çalmasını veya derleme zamanında yanlış davranma …

6
Saf Fonksiyonlar: "Yan Etki Yok" "Her Zaman Aynı Çıktı, Aynı Girdi Verildi" anlamına mı geliyor?
Bir işlevi tanımlayan iki koşul pureaşağıdaki gibidir: Yan etki yok (yani yalnızca yerel kapsamda değişikliklere izin verilir) Aynı girdi verildiğinde her zaman aynı çıktıyı döndür İlk koşul her zaman doğruysa, ikinci koşulun doğru olmadığı zamanlar var mı? Yani gerçekten sadece ilk şart için gerekli mi?

9
Asla çalıştırılmayacak kod, tanımsız davranışı çağırabilir mi?
Tanımlanmamış davranışı çağıran kod (bu örnekte, sıfıra bölme) asla çalıştırılmayacak, program hala tanımsız davranış mı? int main(void) { int i; if(0) { i = 1/0; } return 0; } Bunun hala tanımlanmamış bir davranış olduğunu düşünüyorum, ancak standartta beni destekleyecek veya reddedecek herhangi bir kanıt bulamıyorum. Eee, herhangi bir fikrin …

7
0 değerini ikame olarak NULL kullanabilir miyim?
NULLİşaretçiyi, değerinin yerine kullanmam için kullanabilir miyim 0? Yoksa bununla ilgili yanlış bir şey mi var? Mesela, örneğin: int i = NULL; yedek olarak: int i = 0; Deney olarak aşağıdaki kodu derledim: #include <stdio.h> int main(void) { int i = NULL; printf("%d",i); return 0; } Çıktı: 0 Nitekim bana …


3
std :: vector (ab) otomatik depolama kullanır
Aşağıdaki snippet'i düşünün: #include <array> int main() { using huge_type = std::array<char, 20*1024*1024>; huge_type t; } Açıktır ki, varsayılan yığın boyutu genellikle 20 MB'den küçük olduğundan, çoğu platformda çökecektir. Şimdi aşağıdaki kodu göz önünde bulundurun: #include <array> #include <vector> int main() { using huge_type = std::array<char, 20*1024*1024>; std::vector<huge_type> v(1); } …


3
C ++ decltype ve parantezler - neden?
Konu daha önce tartışılmıştı , ancak bu bir kopya değil. Birisi decltype(a)ve arasındaki farkı sorduğunda decltype((a)), normal cevap - abir değişkendir, (a)bir ifadedir. Bu cevabı tatmin edici bulmuyorum. Birincisi, abir ifadedir. Birincil ifade seçenekleri arasında, diğerleri arasında - (ifade) id-ifadesi Daha da önemlisi, decltype ifadesi parantezleri çok, çok açık bir …

6
2 baytı işaretli bir 16 bit tam sayıya dönüştürmenin doğru yolu nedir?
Gelen bu cevap , Zwol bu iddiayı yaptı: İki bayt veriyi harici bir kaynaktan 16 bit işaretli tam sayıya dönüştürmenin doğru yolu aşağıdaki gibi yardımcı işlevlerdir: #include <stdint.h> int16_t be16_to_cpu_signed(const uint8_t data[static 2]) { uint32_t val = (((uint32_t)data[0]) << 8) | (((uint32_t)data[1]) << 0); return ((int32_t) val) - 0x10000u; } …

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.