Что означает «Условные выражения могут быть только логическими, а не целыми». имею в виду? Я не знаю, Java и я знаю, C++ deffenetly не чего прийти understend, что это значит .. Пожалуйста, помогите (найти в http://www.javacoffeebreak.com/articles/thinkinginjava/comparingc++andjava.html в сравнении C++ и Java пункт 7 подпункта 1)Что означает «Условные выражения могут быть только логическими, а не целыми». имею в виду?
ответ
Условные выражения используются условными и контурными структурами управления для определения потока управления программой.
// 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 */ {
// ...
}
В C++, вы можете сказать, if (someInt)
который в основном эквивалент if (someInt != 0)
. В Java только вторая форма является законной.
Это означает, что для условного выражения требуется булевое значение, преобразование из интегрального типа не будет имплицитным. Вместо if (x)
вам нужно if (x != 0)
и т.д.
Первый является int
, который будет неявно преобразован в bool
в C++ (через != 0
), но последнее выражение дает логическое значение непосредственно.
Интегральное выражение:
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
В C/C++ вы можете сделать
int i = 5;
if(i) { ...}
В Java вы не можете, как я должен быть boolean
Это означает, что в Java логическое значение «true» не является взаимозаменяемым с целым значением «1» (или, точнее, с любым ненулевым целым), а логическое значение «false» не является взаимозаменяемый с целым значением «0».
Возьмите заявление:
if (a > b) {
// Do stuff
}
"условное выражение" является a > b
. В C++ вы можете сделать что-то вроде
int i = foo();
if (i) {
// do stuff
}
Это происходит потому, что интеграл (целые значения) рассматриваются как ложные, когда 0 и верно обратное. Такие языки, как Java, не позволяют рассматривать целые числа как логические значения таким образом.
Выражение - это код, который вычисляет значение. В обоих языках выражение имеет статический тип, описывающий типы значений, которые дает это выражение. Integral означает, что тип выражения - int.
Проще говоря, авторы подчеркивают каждый из следующих является легальным C++ код, но не юридический код Java, потому что Экспрессия if
«s дает целое число:
if (32) {
}
if (2 * 17 - 33) {
}
int c;
if (c = 12) {
}
Говоря иначе: C/C++ не имеют реального булева типа, они просто используют целые числа. У них есть Java, и, кроме того, он имеет более строгую типизацию, чем C/C++.
Оба C (C99) и C++ имеют встроенные булевы типы. –
Нет, не совсем. У них есть заголовочный файл, который определяет «bool» как int. –
Да, действительно :) Для C99 см .: http://www.comeaucomputing.com/techtalk/c99/#bool и для C++: http://msdn.microsoft.com/en-us/library/tf4dy80a(VS. 80) .aspx –
Одна из вещей, которые мне действительно нравятся в Java. – pmr
Собственно, интерпретация чисел/указателей как булевых языков хороша для низкоуровневых языков указателей, таких как C и C++. Для процессора нет такой вещи, как логическое. (Ну, есть флаги сравнения.) – pyon