«language-lawyer» etiketlenmiş sorular

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

4
İade sırasında örtük dönüştürmeye izin verilmiyor
#include <optional> bool f() { std::optional<int> opt; return opt; } Derlemez: 'return': cannot convert from 'std::optional<int>' to 'bool' Referansa danışmak Bir açıklama bulmayı düşünürdüm, ama olması gerektiği gibi okudum. Örtük dönüşümler, T1 türünde bir ifade, bu türü kabul etmeyen, ancak başka bir T2 türünü kabul eden bağlamda kullanıldığında gerçekleştirilir; özellikle: …

1
İşlev argümanı olarak {} neden belirsizliğe yol açmıyor?
Bu kodu düşünün: #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
Std :: dönüşümü std :: back_inserter ile kullanmak geçerli midir?
Cppreference için şu örnek kod vardır 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; }); Ancak şunu da söylüyor: std::transformunary_opveya 'nın siparişe göre uygulanmasını garanti etmez binary_op. Bir diziye sırayla bir işlev uygulamak veya bir dizinin öğelerini değiştiren bir işlevi uygulamak için kullanın std::for_each. …


2
Ok (->) operatörü önceliği / önceliği en düşük mü yoksa atama önceliği / birleşik ataması en düşük mü?
JLS : En düşük öncelik operatörü lambda ifadesinin okudır (->) , ardından atama işleticileri tarafından farkedilmiştir. Hangi yönde takip edildi (artan öncelik, azalan öncelik)? - "izlenen", atamanın daha yüksek önceliğe veya daha düşük önceliğe sahip olduğu anlamına gelir (ok operatörüne göre)? Sanırım, arttıkça, "en düşük" (ok için) kesinlikle en düşük …

2
Değişken başlatma üzerine atlamak kötü biçimlendirilmiş mi yoksa tanımlanmamış davranışa neden oluyor mu?
Bu kodu düşünün: void foo() { goto bar; int x = 0; bar: ; } GCC ve Clang bunu reddeder , çünkü bar:değişken başlatmayı atlar. MSVC (kullanılmasının haricinde hiç şikayet etmiyor xsonra bar:nedenleri bir uyarı). Şununla benzer bir şey yapabiliriz switch: void foo() { switch (0) { int x = …

1
Neden C ++ standardı bu şekilde arama yapıyor?
C ++, streamoffbir (dosya) akışı içindeki bir ofseti temsil etmek için türü kullanır ve [stream.types] içinde aşağıdaki gibi tanımlanır: using streamoff = implementation-defined ; Streamoff türü, işletim sistemi için mümkün olan maksimum dosya boyutunu temsil etmek için yeterli büyüklükte imzalı temel integral türlerinden birinin eş anlamlısıdır. 287) 287) Genellikle uzun …

1
Clang, bir sınıf şablonunun iç içe sınıfının yalnızca uzmanlıklar aracılığıyla tanımlandığı kodu reddetmek için doğru mu?
Aşağıdaki sınıf şablonu verildiğinde: template<typename T> struct Outer { struct Inner; auto f(Inner) -> void; }; Innerher uzmanlık alanı için ayrı ayrı tanımlarız Outer: template<> struct Outer<int>::Inner {}; template<> struct Outer<double>::Inner {}; ve ardından aşağıdaki ftüm uzmanlıklar için üye işlevini bir kez tanımlayın Outer: auto Outer<T>::f(Inner) -> void { } …

1
Sizeof (enum) sizeof'den farklı olabilir mi (std :: underlying_type <Enum> :: type)?
Son zamanlarda aşağıdaki örnekte bir kod incelemesi geldi: 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)); sizeof(std::underlying_type&lt;A&gt;::type)Bunun yerine kullanmalıyız sizeof(A). Bunların hiç değişebilmesi mümkün müdür? Birisi bunu garanti eden bir standart …


1
C ++ derleyicileri extern değişkenini nasıl bulur?
Bu programı g ++ ve clang ++ ile derledim. Bir fark var: g ++ 1 yazdırır, ancak clang ++ 2 yazdırır. Görünüşe göre g ++: extern değişkeni en kısa kapsamda tanımlanmıştır. clang ++: extern değişkeni en kısa global kapsamda tanımlanır. C ++ spec bu konuda herhangi bir şartname var mı? …

2
`Std :: basic_ios`'un neden bir kamu kurucusu var?
std::basic_iosbir kamu kurucusu var : explicit basic_ios (std::basic_streambuf&lt;CharT,Traits&gt;* sb); IMO, bir sınıfın ortak bir kurucuya sahip olmasının tek nedeni, bir programda o sınıfın bağımsız bir örneğini kullanmaktır. Bir sınıf yalnızca diğer sınıfların ondan alçalması için mevcutsa (durumun göründüğü gibi basic_ios), sınıfın tüm kurucuları olmalıdır protected. İnşaatçılarının std::ios_basehepsi korunur. Ancak, bir …

2
Hiçbir zaman geçerli bir C ++ programını sonlandırmaz mı?
Bir programın sonlanması gerekiyor mu? Diğer bir deyişle, teknik olarak Tanımsız Davranış sonsuza dek çalışan bir program mı? Bunun boş döngülerle ilgili olmadığını unutmayın. Sonsuza kadar "şeyler" (yani gözlemlenebilir davranış) yapan programlar hakkında konuşmak. Örneğin böyle bir şey: int main() { while (true) { try { get_input(); // calls IO …

1
Boş taban sınıfı da üye değişken olduğunda boş taban optimizasyonu neden yasaklanmıştır?
Boş taban optimizasyonu harika. Ancak, aşağıdaki kısıtlama ile birlikte gelir: Aynı tabandaki iki temel alt nesnenin nesne temsili içinde farklı adreslere sahip olması gerektiğinden, boş taban sınıflarından birinin de ilk statik olmayan veri üyesinin türü veya tabanı olması durumunda boş taban optimizasyonu yasaktır. türetilmiştir. Bu kısıtlamayı açıklamak için aşağıdaki kodu …


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.