сбой clang во время компиляции .cpp в Xcode в режиме Release, но нормально в отладке

std::vector< bool > упаковывает его содержимое, поэтому каждое булево значение хранится в одном бите, восемь бит - в байт. Это эффективно с точки зрения памяти, но вычислительно интенсивно, так как процессор должен выполнить арифметику для доступа к запрошенному биту. И это не работает с bool ссылкой или семантикой указателя, поскольку биты внутри байта не имеют адресов в объектной модели C ++.

Вы все же можете объявить переменную типа std::vector<bool>::reference и использовать как будто это было bool&. Это позволяет универсальным алгоритмам быть совместимыми.

std::vector< bool > bitvec( 22 );
std::vector< bool >::reference third = bitvec[ 2 ];
third = true; // assign value to referenced bit

В C ++ 11 вы можете обойти это с помощью auto и спецификатора &&, который автоматически выбирает ссылку на lvalue, привязанную к векторному элементу или ссылку rvalue, привязанную к временному.

std::vector< bool > bitvec( 22 );
auto &&third = bitvec[ 2 ]; // obtain a std::vector< bool >::reference
third = true; // assign value to referenced bit
2
задан kawingkelvin 18 January 2019 в 07:04
поделиться

1 ответ

У вас сбой в компиляторе, что раздражает. Лучший способ зарегистрировать ошибку - максимально уменьшить ее.

Лучший способ сделать это с помощью программы Creduce . Это программа, которая требует файл и скрипт. Файл - ваша стартовая ситуация. Сценарий должен доказать, что ваша ошибка все еще существует.

В этом случае ваш сценарий может существовать для 2 команд компиляции и проверки кода возврата. Файл просто ваш .CPP

При всем этом программа выбросит код ... и максимально уменьшит размер файла. Я видел, как 100 000 строк были сокращены до 5.

Трюки: предварительно обработанные файлы имеют больший размер, хотя и являются автономными, поэтому их проще уменьшить.

Наконец, вам нужно много времени. Вы запускаете его, и он работает до тех пор, пока он не уменьшится

Если он выполняется менее чем за пять минут, ваш скрипт неисправен, и у вас обычно получается пустой .CPP Ожидаемое время находится в диапазоне часов.

0
ответ дан JVApen 18 January 2019 в 07:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: