2017-11-22 60 views
15

Özel bir BOOL türünü unsigned int ile eşleştiren eski bir derleyici ile yazılmış bir başkasının kodunu kullanıyorum ancak derleyicimde gerçek bir bool ile eşlenmiş. Kodunun bazı yerlerinde, daha önce hiç görmediğim bool tipindeki bitlik vardiya operatörü <<'u kullanır ve derleyici şikayet etmediğinde beni şaşırttı.C++'da bir boole bitsel olarak geçiş yapabilir misiniz?

Bu geçerli C++? bool otomatik olarak bir int veya uint'a yükseltiliyor mu?

Başka bir konuda biraz açıklık sağlayan this related question'u gördüm, ancak vardiya operatörlerini ele almıyor.

+0

Standart diller arasında gezinme olmadan, operatörlerin bir [referans] ile nasıl çalıştığını görebilirsiniz (http://en.cppreference.com/w/cpp/language/operator_arithmetic). – chris

+0

Ben daha önce bitwise vardiya gördüm ve kullanımını anladım ... Ben sadece bir 'bool' tipi ile kullanılan görmedim. Derleyicimin izin verdiğini biliyorum, ama diğerleri mi olacak? Ben bilmek istediğim buydu. – Phlucious

+0

Bir boole bitshift mantıksal olarak ne yapmalı? –

cevap

10

kaynaktan Kaydırma operatörleri[expr.shift]

işlenen yekpare ya da unscoped numaralandırma tipi olacaktır ve integral promosyonlar gerçekleştirilir. sonuç tip teşvik sol işlenen

bool kod de oluşturulur, böylece tamamlayıcı tipi (boolint yükseltildikten ve sonuçta int olan) olmasıdır. [conv.prom] itibaren

, biz terfi Boolean tamsayılar göstermek:

tip bool bir prvalue false olma sıfır ve gerçek olma ile, tip int bir prvalue dönüştürülebilir one

Daha sonra, kaydırma normal şekilde davranır. (Teşekkür ederiz, @chris)

+1

Değer, normal bool-int dönüşümlerini izler. 'false' 0'a dönüştürülür ve tam tersi, 'true' ise 1'e dönüştürülür ve 0'dan 'true'a dönüştürülür. Bu noktada, vardiyasından önce ve sonra “bool” ve “bool” dönüşümleri ile “int” üzerinde düzenli bir değişim olur. – chris

+0

@chris: Teşekkürler. Güncellenmiş. – AndyG

+0

Amaçlanan davranışa açıklık getirdiğiniz için teşekkür ederiz.Bu alıntıları bağlantılara güncelleyebilir misiniz? [Foo.bar] sözdizimini anlamıyorum. – Phlucious

0

Sağdakilerden bağımsız olarak, bir boole kaydırmanın sonuç türü her zaman int olur.

İlgili konular