std::chrono::duration_cast
возвращает std::chrono::duration
объект .
printf
функция - старая функция совместимости с C, и поэтому ничего не знает об объектах C ++.
Короче говоря, то, что вы печатаете, на самом деле не является продолжительностью, вместо этого у вас есть неопределенное поведение! Учитывая, что вы находитесь в Ubuntu, вы используете либо GCC, либо Clang, оба компилятора, которые должны жаловаться на это.
Если вы хотите напечататьфактическая длительность "count", затем используйте функцию-член count
, предпочтительно вместе с std::cout
, чтобы получить безопасные для типов преобразования:
std::cout << "Item " << i << ": " << duration_cast<std::chrono::nanoseconds>(e1-s1).count() << " ns\n";
Или, если ваш компилятор может обрабатывать некоторыеиз изменений в будущем стандарте C ++ 20 (который определяет перегрузку operator<<
для длительностей):
std::cout << "Item " << i << ": " << duration_cast<std::chrono::nanoseconds>(e1-s1) << " ns\n";
Большой урок: не смешивайте C ++и старые функции Си.Они редко очень хорошо сочетаются.
Возможно, вы захотите получить несколько хороших книг , которые помогут вам правильно изучить C ++.