CLion помечает код как «недостижимый» при использовании пользовательского типа Vector, но не при использовании std::vectC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 CLion помечает код как «недостижимый» при использовании пользовательского типа Vector, но не при использовании std::vect

Сообщение Anonymous »

Я использую тип Stanford C++ Library Vector, и статический анализатор CLion помечает блок кода как "Недостижимый", хотя программа работает корректно.
Предупреждение начинается со строки, где я обращаюсь к строкам[0], и все, начиная с этого момента, отображается серым цветом. Когда я заменяю пользовательский вектор на std::vector, предупреждение исчезает.

Код: Выделить всё

...

typedef Vector VectorInt;
typedef Vector VecVecString;

...

int LongestLineCount(ifstream & inT) {
VecVecString lines;
Scanner scanner;
scanner.setSpaceOption(Scanner::IgnoreSpaces);

// Read all lines and tokenize
while (true) {
string line;
getline(inT, line);

if (inT.fail()) break;

scanner.setInput(line);
Vector tokens;

while (scanner.hasMoreTokens()) {
tokens.add(scanner.nextToken());
}

lines.add(tokens);
}

// Check if file was empty
if (lines.isEmpty()) {
return 0;
}

// Find line with most tokens
Vector max = lines[0];   //  max.size()) {
max = lines[i];
}
}

return max.size();
}
Ожидаемое поведение:
  • Код после строк[0] следует считать достижимым, посколькуlines.isEmpty() уже проверена.
  • Эта функция должна вести себя так же, как эквивалентная версия, использующая std::vector.
Фактическое поведение в CLion:
  • Строки после доступа к строкам[0] помечены как Недоступны.
  • Код работает нормально во время выполнения.
  • Предупреждение исчезает при замене пользовательского типа Vector на std::vector.
Почему статический анализ CLion решил, что это так этот блок недоступен при использовании класса Stanford Vector? Делает ли CLion предположения из-за неполного знания пользовательского контейнера? Или что-то в реализации Vector может сбить с толку анализатор?
Буду признателен за любой совет или объяснение.
Я использую
  • c++98/c++11
  • CLion — сборка № CL-252.27397.114, построенная 24 октября 2025 г.


Подробнее здесь: https://stackoverflow.com/questions/798 ... t-not-with
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»