ОБНОВЛЕНО (Извините за мои ошибки в командной строке)
Лучше используйте эту команду:
g++ `pkg-config --cflags --libs opencv` opencv.cpp -o opencv
Команда pkg-config
найдет правильное включение и библиотеку для вашего исходный код. Для лучшей обработки с помощью программирования OpenCV используйте IDE, например code::block
.
Возможно, этот учебник поможет вам в программировании OpenCV с помощью code::block
: Как установить OpenCV для кода :: block в Linux и Windows?
Да, это сокращенная форма
int count;
if (isHere)
count = getHereCount(index);
else
count = getAwayCount(index);
. Она называется условным оператором . Многие (ошибочно) называют его троичным оператором , потому что это единственный троичный оператор (с тремя аргументами) в Java, C, C ++ и, возможно, во многих других языках. Но теоретически мог бы быть другим троичным оператором, тогда как может быть только один условный оператор .
Официальное название дано в Спецификации языка Java :
§15.25 Условный оператор? :
Условный оператор
? :
использует логическое значение одного выражения, чтобы решить, какое из двух других выражений должно быть оценено.
Обратите внимание, что обе ветви должны приводить к методам с возвращаемыми значениями:
Это ошибка времени компиляции, когда выражение второго или третьего операнда является вызовом метода void.
Фактически, грамматикой операторов выражения ( §14.8 ) , не допускается, чтобы условное выражение появлялось в любом контексте, где мог бы появиться вызов метода void.
Таким образом, если doSomething ()
и doSomethingElse ()
являются void методы, вы не можете сжать это:
if (someBool)
doSomething();
else
doSomethingElse();
в это:
someBool ? doSomething() : doSomethingElse();
Простые слова:
booleanCondition ? executeThisPartIfBooleanConditionIsTrue : executeThisPartIfBooleanConditionIsFalse
Другие ответили на это в разумной степени, но часто с именем «троичный оператор».
Будучи педантом, я хотел бы прояснить, что имя оператор - это условный оператор или «условный оператор?». Это троичный оператор (в том смысле, что он имеет три операнда), и на данный момент это единственный троичный оператор в Java.
Однако спецификация довольно ясно , что его имя является условным оператором или «условным оператором?», чтобы быть абсолютно однозначным. Я думаю, что более понятно называть его этим именем, поскольку оно указывает на поведение оператора в некоторой степени (оценивает условие), а не только на то, сколько у него операндов.
Мне действительно очень нравится этот оператор, но читатель должен быть принят во внимание.
Вы всегда должны балансировать компактность кода со временем, потраченным на его чтение, и в этом он имеет некоторый довольно серьезные недостатки.
Прежде всего, это дело Первоначального Аскера. Он просто час писал об этом и читал ответы. Сколько времени понадобилось бы автору, чтобы написать каждый? Как если бы / то на протяжении всей его жизни. Не час, чтобы быть уверенным. Во-вторых, в C-подобных языках вы привыкли просто знать, что условные выражения - это первое, что стоит в строке. Я заметил это, когда использовал Ruby, и натолкнулся на строки вроде:
callMethodWhatever(Long + Expression + with + syntax) if conditional
Если бы я долгое время пользовался Ruby, у меня, вероятно, не было бы проблемы с этой строкой, но она исходила из C, когда вы видите «callMethodWhwhat» как первая вещь в очереди, вы ожидаете, что она будет выполнена. Символ?: Менее загадочный, но все же достаточно необычный, чтобы сбить читателя с толку.
Преимущество, однако, заключается в том, что вы действительно здорово чувствуете себя в животике, когда вы можете написать 3-строчный оператор if в интервале от 1 до линии. Не могу этого отрицать :) Но, честно говоря, не обязательно более читабельно 90% людей там просто из-за его редкости.
Когда это действительно задание, основанное на булевых значениях и значениях, у меня нет проблем с ним, но им легко злоупотреблять.
) Но, честно говоря, не обязательно более читабельно для 90% людей просто из-за его редкости.Когда это действительно задание, основанное на булевых значениях и значениях, у меня нет проблем с ним, но им легко злоупотреблять.
) Но, честно говоря, не обязательно более читабельно для 90% людей просто из-за его редкости.Когда это действительно задание, основанное на булевых значениях и значениях, у меня нет проблем с ним, но им легко злоупотреблять.
Да, ты прав. ?: обычно называется «троичным условным оператором», часто называемым просто «троичным оператором». Это сокращенная версия стандарта if / else условная.
Это условный оператор, и это больше, чем просто сжатый способ записи операторов if.
Поскольку это выражение возвращает значение, его можно использовать как часть других выражений.
Возможно, вас заинтересует предложение для некоторых новых операторов, похожих на условный оператор. Нулезобезопасные операторы включат код, подобный следующему:
String s = mayBeNull?.toString() ?: "null";
Было бы особенно удобно, когда происходит автоматическая распаковка.
Integer ival = ...; // may be null
int i = ival ?: -1; // no NPE from unboxing
Он был выбран для дальнейшего рассмотрения в JDK 7 «Project Coin».
Тройной, условный; помидор, томат. Для чего это действительно ценно - это инициализация переменных. Если (как и я) вам нравится инициализировать переменные там, где они определены, то условный троичный оператор (для него обоих) позволяет вам делать это в тех случаях, когда существует условие относительно его значения. Особенно примечателен в конечных полях, но полезен и в других местах.
Например:
public class Foo {
final double value;
public Foo(boolean positive, double value) {
this.value = positive ? value : -value;
}
}
Без этого оператора - по какому-либо имени - вам пришлось бы сделать поле не конечным или написать функцию просто для его инициализации. На самом деле, это не так - его все еще можно инициализировать, используя if / else, по крайней мере, в Java. Но я нахожу это чище.
condition ? truth : false;
Если условие истинно
, вернуть первый параметр. Если условие ложно
, вернуть второй параметр.
Он называется условным оператором и является типом троичной операции .
int count = isHere ? getHereCount(index) : getAwayCount(index);
означает:
if (isHere) {
count = getHereCount(index);
} else {
count = getAwayCount(index);
}
Не совсем верно, если быть точным:
То, что «возвращено» очень важно. Это означает, что методы должны возвращать значение, и это значение должно быть где-то назначено.
Кроме того, это не совсем синтаксически эквивалентно версии if-else , Например:
String str1,str2,str3,str4;
boolean check;
//...
return str1 + (check ? str2 : str3) + str4;
Если закодировано с if-else, всегда будет получаться больше байт-кода.
В соответствии с спецификацией Sun Java он называется условным оператором. Смотрите раздел 15.25. Вы правы относительно того, что он делает.
Условный оператор? : использует логическое значение одного выражения, чтобы решить, какое из двух других выражений должно быть оценено.
Условный оператор синтаксически ассоциативен справа (он группирует справа налево), так что a? b: c? d: e? f: g означает то же самое, что и a? b: (c? d: (e? f: g)).
ConditionalExpression:
ConditionalOrExpression
ConditionalOrExpression ? Expression : ConditionalExpression
Условный оператор имеет три выражения операнда; ? появляется между первым и вторым выражениями, а: появляется между вторым и третьим выражениями.
Первое выражение должно иметь тип boolean или Boolean, иначе произойдет ошибка времени компиляции.