"If constexpr" yanlış dalı neden derleniyor?

Aug 18 2020

Bu kod derleme sırasında neden hata veriyor? " " Bilgim (ve ayrıca bu ) bloğun derlenmemesi gerektiğini if constexprsöylüyor else.

if constexpr (true) {
    int a = 10;
} else {
    int b = 10
}

Hata şudur:

error: expected ‘,’ or ‘;’ before ‘}’ token

Kullanılan derleyici: g ++ sürüm 7.5.0
Derleme sırasında -std=c++17bayrak kullandım .

PS Eksik ';' kasıtlı, sadece elsederlenip derlenmediğini kontrol etmek için.

Yanıtlar

7 cigien Aug 18 2020 at 20:13

Burada 2 ayrı ama birbiriyle ilişkili konu var.

İlk olarak, if constexprbir şablon içinde bir dalı yalnızca koşullu olarak derleyecektir. Bir şablonun dışında, tüm dallar derlenecek ve iyi biçimlendirilmelidir.

İkinci olarak, bir şablonda bile, atılan bir dalın if constexprtüm olası örnekler için kötü biçimlendirilmesi mümkün değildir. Kodunuzda durum böyle değildir, çünkü:

int b = 10

her zaman biçimsizdir (eksiklik nedeniyle ;).

Yani derleyici, derleme hatası vermekte haklıdır. Teknik olarak, eğer atılan dal tüm örnekler için kötü biçimlendirilmişse, derleyicinin bir derleyici hatası vermesi gerekmez , ancak kod yine de yanlıştır.