Суть здесь в том, что то, что вы пытаетесь выразить, не может быть выражено одним логическим условием с включенным в него объявлением alpha
(несмотря на то, что утверждают некоторые другие ответы).
В других ответах вам уже объяснялось, что ваше условие не анализируется так, как вы думаете, что оно анализируется, хотя во многих ответах есть очевидная ошибка ссылки на приоритет оператора =
в условии, хотя на самом деле там вообще нет оператора =
. Правильное объяснение состоит в том, что когда вы объявляете переменную в условии if
, синтаксис аналогичен объявлению с инициализатором, поэтому все это анализируется так же, как
int alpha = value1 - value2 && alpha > 0.001;
будет проанализирован, т.е. это объявление int alpha
, инициализированное с помощью value1 - value2 && alpha > 0.001
. В нем нет оператора =
. И я надеюсь, что теперь вы понимаете, почему компилятор говорит, что вы читаете неинициализированную переменную в выражении инициализатора. Компилятор подал бы такую же жалобу на следующее объявление
int alpha = alpha; // reading uninitialized variable
по той же причине.
Чтобы достичь того, что вы буквально пытаетесь выразить, вы должны либо заранее объявить alpha
int alpha;
if ((alpha = value1 - value2) && alpha > 0.001) {
// whatever
}
или разделите свой if
на два
if (int alpha = value1 - value2)
if (alpha > 0.001) {
// whatever
}
Однако, поскольку второе условие уже требует, чтобы alpha
было больше, чем 0
, нет особого смысла даже проверять первое, поэтому наиболее значимым вариантом было бы просто свести все это к
int alpha = value1 - value2;
if (alpha > 0.001) {
// whatever
}
Конечно, как уже отмечали другие, сравнение значения int
со значением 0.001
является допустимым, но довольно странным делом. Просто сделать
int alpha = value1 - value2;
if (alpha > 0) {
// whatever
}
person
AnT
schedule
20.01.2010
alpha > 0
. Его легче печатать, он делает то же самое и более четкий. В качестве альтернативы выполните сравнение с числами с плавающей запятой. - person David Thornley   schedule 20.01.2010