2009-09-25 25 views
27

if (c),C++ ile aynı mı?C++ de if deyimi nasıl değerlendirilir?

+2

0'ın her zaman aynı şey anlamına gelmediğini unutmayın. Boş gösterici sabit veya tamsayı sıfır olabilir. –

+3

"C++ ile aynı (c) = ile aynıysa (c) ile aynı mıdır?" Demek istemiyor musunuz? ? –

+0

Belirli bir türdeki değişken c mü? –

cevap

44

Hayır, if (c), if (c != 0) ile aynıdır. Ve if (!c), if (c == 0) ile aynıdır.

+9

varsayarsak hiçbir garip aşırı yükleme alıyor [negatif sayılar C C++?/return false yapın] Genellikle C++ 'daki cevabın bir parçası olan yer. –

+6

Tabi ki, eğer operatörler == veya! = Aşırı yüklendiyse, bir şey olabilirdi, hatta sizin için milli marşı oynamaya başlayabilirdi ... ;-) – Jesper

+9

Bu günlerden birinde operatörleri aşırı yükleyen bir sınıf yapacağım ses efektlerini çalmak. Birisi onları sıralamak istediğinde harika olacak. – rlbond

3

Daha Elbette if (c != 0)

gibi != operatör bu o tam eşit olduğunu söylemek tamamen doğru değil bu yüzden aşırı yüklenebilir bu.

0

== 0 - != 0 için değiştirirseniz, aynıdır.

+0

Uh, hayır değiller. – Aistina

+0

if ifadesi, * true olmayan bir şeyi kabul etmek için * tanımlı *. Yani evet aynı. C. –

21

Bu paketteki paketten ayrılıyorum ... "if (c)", "if (((bool)c) == true)" ile yakındır. Tamsayı türleri için, bu "if (c != 0)" anlamına gelir. Başkalarının işaret ettiği gibi, operator !='un aşırı yüklenmesi bazı garipliklere neden olabilir, ancak yanılmadığım sürece "operator bool()" aşırı yüklenebilir.

+1

soru başlangıçta yalnızca C dolayısıyla yukarıdaki cevapları etiketlendi if (static_cast (c)) ... Ben paltomu alırsınız. –

+3

hiçbir bool olmadığı –

+0

C99, Boole ... – rlbond

0

Bu, yalnızca sayısal değerler için geçerlidir.

c işaretçi veya sayısal bir değer ise
#include <stdio.h> 

class c_type 
{ 
public: 
    operator bool() 
    { 
     return true; 
    } 
}; 

int main() 
{ 
    c_type c; 
    if (c) printf("true"); 
    if (!c) printf ("false"); 
} 
6

,

if(c) 

eşdeğerdir: C sınıfı ise, örneğin burada olduğu gibi, dönüşüm boolean yapar aşırı bir operatör olmalıdır
if(c != 0) 

c boole (tip BOOL [yalnızca C++]), (düzenleme: veya operatör bool() arasında aşırı bir kullanıcı tanımlı tipi) ise

c işaretçi veya sayısal bir değer ne bir Boole ne olursa
if(c) 

if(c) 

derlenmeyecektir,

if(c == true) 

eşdeğerdir.

if (c != 0) 

ikinci eski ise 0 (boş) işaretçi karşı c bir doğrudan check olarak

+2

Bu c, kullanıcı tarafından tanımlanan bir operatördür, sadece “operatör bool()”, D. Shawley ve galerilerin her ikisini de işaret eder ve bu sayede çok iyi bir şekilde derlenir. Tam – Troubadour

+0

, ben hem bir ibrenin durumunda kesinlikle aynı anlama ... –

-5

c bir işaretçi testi

if (c) 

ise oldukça aynı değildir aslında c'un geçerli bir nesneyi işaretleyip işaretlemediğini kontrol etme talimatıdır. Genellikle derleyiciler aynı kodu üretirler.

+0

hayır, öyle değil açıklama ekleyin: if (c = NULL!) – Massa

+0

derleme ve/veya çalışma zamanı için hiçbir yolu yoktur Bir nesnenin C veya C++ 'da geçerli olup olmadığını bilmek. Yazabilirsiniz: "X * c = (X *) 1;" Ardından c kesinlikle geçersiz bir nesneye işaret eder. Ve "(c)" ise true olacaktır. –

+0

@Andrew: Açıkladığınız ifadeyi, nesnenin geçerli olup olmadığını kontrol etmenin bir yolu olmadığını haklı çıkaracağınızdan şüpheliyim. Kesinlikle derleyici tarafından çalışma zamanı kodunun kontrol edilmesi için çok çaba sarfedilmesi gerekecek ve bu nedenle derleyicilerin aynı kodu ve null işaretçisine karşı sınama yapmamaları ve bu kodu üretmemelerinin nedeni budur. İşte bu yüzden, örneğiniz (muhtemelen) tüm derleyicileri yanlış bir şekilde sonuçlandıramıyor. – Troubadour