Эй, ребята, у меня есть вопрос о переменных и заявлениях If.
Причина, по которой я спрашиваю, заключается в том, что я назначаю токены в векторе строк переменным, но если в моем векторе только 3 элемента, и я пытаюсь присвоить переменную myVector (5), я получаю ошибку.
Это мое решение этой проблемы
std::string element5;
if(myVector.size () >= 4)
(
std::string element5 = myVector.at(4)
}
Но что не изменит строку вне оператора if? Мой код работает нормально, если у меня ровно 5 элементов и нет проверки ошибок, но если я передаю стандартный ввод, я действительно не знаю, сколько всего элементов, все, что я буду знать, это то, что максимум 50 элементов.
Мне не нужно выводить какие-либо элементы, просто запустите этот код на каждом
if(countSubstring(element5,"a") > 0)
{
a = a + 1
}
тогда я бы вывел.
как заставить element5 сохранить новую строку?
Ваш код здесь переопределяет вашу переменную element5
:
std::string element5;
if(myVector.size () >= 4)
(
std::string element5 = myVector.at(4)
}
Здесь вы впервые заявляете element5
после первой строки, а затем вы повторно объявите его на третьей строке в вашем if
заявление. Это по существу «воссоздает» переменную element5
для этой сферы {}
, И тогда, конечно, pop
изданный сразу после объема. Так что вы не увидите изменений в element5
если вы попытаетесь распечатать его из области видимости.
Легко, просто не объявляйте свою переменную заново, и все готово! Вот так:
std::string element5;
if(myVector.size () >= 4)
(
element5 = myVector.at(4)
}
Как я уже сказал, внизу на уровне сборки переменная получает push
ed, а затем внезапно, когда он переходит на другой уровень и эта же переменная повторно объявляется, о глобальной переменной забывают. И как только сфера действия заканчивается:
{
//This is a scope
}
повторно объявленная переменная получает pop
сошел со стека, и у нас есть наш оригинальный element5
обратно! Это уйдет element5
в том же положении, так как вы на самом деле не изменили его;).
Не ссылаться на объект вне области видимости; не делай этого!
C ++: ссылка на "выходит за рамки" объект
Что происходит, когда ссылка на C ++ выходит за рамки?
Что происходит в C ++, когда я передаю объект по ссылке, и он выходит из области видимости?
объем: «Контейнер», в котором в данный момент выполняется программа; например, давайте возьмем это:
int main() {
//1st scope
if (true) {
//2nd scope
{
//third scope
}
}
}
Неопределенное поведение (UB):
Когда в не определено/неизвестный состояние в любое время, указанное во время компиляции. Компилятор делает все, что захочет, что делает его очень опасным поведением, особенно если вы пишете большой проект! Вот хороший вопрос / ответ на эту тему:
https://softwareengineering.stackexchange.com/questions/99692/philosophy-behind-undefined-behavior
Вы переопределяете строку внутри оператора if, вы не должны этого делать, потому что вы хотите использовать строку, которая была объявлена ранее.
Так что просто замени std::string element5 = myVector.at(4)
с element5 = myVector.at(4)