2010-06-14 4 views
4

Что означает «Условные выражения могут быть только логическими, а не целыми». имею в виду? Я не знаю, Java и я знаю, C++ deffenetly не чего прийти understend, что это значит .. Пожалуйста, помогите (найти в http://www.javacoffeebreak.com/articles/thinkinginjava/comparingc++andjava.html в сравнении C++ и Java пункт 7 подпункта 1)Что означает «Условные выражения могут быть только логическими, а не целыми». имею в виду?

+0

Одна из вещей, которые мне действительно нравятся в Java. – pmr

+0

Собственно, интерпретация чисел/указателей как булевых языков хороша для низкоуровневых языков указателей, таких как C и C++. Для процессора нет такой вещи, как логическое. (Ну, есть флаги сравнения.) – pyon

ответ

6

Условные выражения используются условными и контурными структурами управления для определения потока управления программой.

// conditional control structure 
if (conditionalExpression) { 
    codeThatRunsIfConditionalExpressionIsTrue(); 
} else { 
    codeThatRunsIfConditionalExpressionIsFalse(); 
} 

// basic loop control structure 
while (conditionalExpression) { 
    codeThatRunsUntilConditionalExpressionIsFalse(); 
} 

// run-at-least-once loop control structure 
do { 
    codeThatRunsAtLeastOnceUntilConditionalExpressionIsFalse(); 
} while (conditionalExpression); 

С логической точки зрения условные выражения по своей природе являются логическими (истинными или ложными). Однако некоторые языки, такие как C и C++, позволяют использовать числовые выражения или даже указатели как условные выражения. Когда небулево выражение используется как условное выражение, они неявно преобразуются в сравнения с нулем. Например, вы могли бы написать:

if (numericalExpression) { 
    // ... 
} 

И это будет означать следующее:

if (numericalExpression != 0) { 
    // ... 
} 

Это позволяет лаконичный код, особенно в языках стрелочных как C и C++, где тестирование для нулевых указателей является довольно распространенным явлением , Тем не менее, сделать ваш код кратким, не обязательно делает его более ясным. В языках высокого уровня, таких как C# или Java, использование числовых выражений в качестве условных выражений недопустимо. Если вы хотите, чтобы проверить, был ли инициализирован ссылкой на объект, вы должны написать:

if (myObject != null) /* (myObject) alone not allowed */ { 
    // ... 
} 

Аналогично, если вы хотите, чтобы проверить, является ли числовое выражение равно нулю, вы должны написать:

if (numericalExpression != 0) /* (numericalExpression) alone not allowed */ { 
    // ... 
} 
4

В C++, вы можете сказать, if (someInt) который в основном эквивалент if (someInt != 0). В Java только вторая форма является законной.

7

Это означает, что для условного выражения требуется булевое значение, преобразование из интегрального типа не будет имплицитным. Вместо if (x) вам нужно if (x != 0) и т.д.

Первый является int, который будет неявно преобразован в bool в C++ (через != 0), но последнее выражение дает логическое значение непосредственно.

2

Интегральное выражение:

int i = 5; 
if(i) { 
    //... 
} 

//In C/C++, if(i) gets implicitly converted to if(i != 0), Java doesn't do this for you. 

логическое выражение

int i = 5; 
if(i==5) { 
    //... 
} 

//This will work in Java 
2

В C/C++ вы можете сделать

int i = 5; 
if(i) { ...} 

В Java вы не можете, как я должен быть boolean

2

Это означает, что в Java логическое значение «true» не является взаимозаменяемым с целым значением «1» (или, точнее, с любым ненулевым целым), а логическое значение «false» не является взаимозаменяемый с целым значением «0».

3

Возьмите заявление:

if (a > b) { 
    // Do stuff 
} 

"условное выражение" является a > b. В C++ вы можете сделать что-то вроде

int i = foo(); 
if (i) { 
    // do stuff 
} 

Это происходит потому, что интеграл (целые значения) рассматриваются как ложные, когда 0 и верно обратное. Такие языки, как Java, не позволяют рассматривать целые числа как логические значения таким образом.

1

Выражение - это код, который вычисляет значение. В обоих языках выражение имеет статический тип, описывающий типы значений, которые дает это выражение. Integral означает, что тип выражения - int.

Проще говоря, авторы подчеркивают каждый из следующих является легальным C++ код, но не юридический код Java, потому что Экспрессия if «s дает целое число:

if (32) { 

} 

if (2 * 17 - 33) { 

} 

int c; 
if (c = 12) { 

} 
1

Говоря иначе: C/C++ не имеют реального булева типа, они просто используют целые числа. У них есть Java, и, кроме того, он имеет более строгую типизацию, чем C/C++.

+0

Оба C (C99) и C++ имеют встроенные булевы типы. –

+0

Нет, не совсем. У них есть заголовочный файл, который определяет «bool» как int. –

+0

Да, действительно :) Для C99 см .: http://www.comeaucomputing.com/techtalk/c99/#bool и для C++: http://msdn.microsoft.com/en-us/library/tf4dy80a(VS. 80) .aspx –

 Смежные вопросы

  • Нет связанных вопросов^_^