Порядок приоритета в операторе if Переполнение стека

Я пытаюсь сконструировать конструкцию, которая может проверять наличие ошибок при вводе, поэтому я написал две логические функции в тестовой программе, параметры которой являются ссылками на строки. Я надеялся, что мой оператор if оценит первую изменяющую функцию часть слова, затем снова оценит второе изменяющее функцию слово и, наконец, оценит && чтобы увидеть, печатать ли. Однако мой код не запустится, и ошибка говорит о том, что ни один операнд не соответствует << оператор для Cout, когда я пытаюсь вывести код. Мой код может объяснить лучше, чем я. Может кто-нибудь объяснить, почему это не сработает? Я использую Visual Studio 2012.

#include <iostream>
using namespace std;

bool changeString1(string &word){
word[0]='a';
return word[1]=='b';
}

bool changeString2(string &word){
word[2]='c';
return word[3]=='d';
}

int main(){
cout << "hello" << endl;

string word("cbad");
if(changeString1(word) && changeString2(word)){
cout << word << endl;
}
system("Pause");
return 0;
}

-1

Решение

Ваша проблема, вероятно, в том, что у вас нет #include <string> в начале вашего кода.

Порядок эвакуации && а также || выражения строго «слева направо» и гарантировано «короткое замыкание», когда выражение определяется левым операндом.

При использовании других операторов он не определен, например, if (changeString1(word) + changeString2(word)), компилятор будет разрешено вызывать changeString2 до changeString1,

Другими словами, когда есть && (и) в выражении, если первое условие ложно, второе выражение не оценивается, а если первое выражение истинно, второе вычисляется. Поскольку оба действительно верны в этом случае, оба оцениваются.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]