In GCCОператор ',' всегда возвращает второй аргумент?
#include <iostream>
int main() {
if(1 == 2, true) {
std::cout << "right" << std::endl;
} else std::cout << "left" << std::endl;
return 0;
}
это выход 'право', это всегда так?
Может ли компилятор просто оптимизировать левый операнд, поскольку он не использовался?
warning: left operand of comma operator has no effect [-Wunused-value]
if(1 == 2, true) {
~~^~~~
У меня есть некоторый код, как это:
if(doSomethingHereWhichAlwaysReturnsTrue,
doSomeOtherHereAndDependOnTheResultExecuteBodyOrNot) {
..body.. - execute if 'doSomeOther' returns true
}
С помощью этого кода отладки только, я удивляюсь я могу использовать такую конструкцию в выпуске. Я думаю нет.
Чтобы не спрашивать дважды, я также использовать иногда назначение цепочки как:
int i, j, k, l;
i = j = k = l = 0;
это безопасно?
Я слышал, что порядок выполнения не определен, и поэтому это неопределенное поведение. И как UB он может быть четко оптимизирован компилятором, но с использованием «-O3 -Wall -pedantic« Я не вижу никаких предупреждений с ним и ожидаемого результата, поэтому я думаю, что здесь нет.
«Не спрашивать дважды» Почему бы и нет? Различные вопросы должны идти на отдельные вопросы. – MikeCAT
@MikeCAT, разумная привычка к объединению запросов –
два вопроса не связаны друг с другом, они заслуживают отдельных вопросов и отдельных ответов. – user463035818