As far as I can tell, the same as the difference between static_cast and std::floor : the cons are rounded down, not truncated to zero.
#include <iostream> #include <chrono> using namespace std::chrono_literals; int main() { std::cout << "duration_cast:" << std::endl; std::cout << "1.4s: " << std::chrono::duration_cast<std::chrono::seconds>(1400ms).count() << std::endl; std::cout << "1.5s: " << std::chrono::duration_cast<std::chrono::seconds>(1500ms).count() << std::endl; std::cout << "1.6s: " << std::chrono::duration_cast<std::chrono::seconds>(1600ms).count() << std::endl; std::cout << "-1.4s: " << std::chrono::duration_cast<std::chrono::seconds>(-1400ms).count() << std::endl; std::cout << "-1.5s: " << std::chrono::duration_cast<std::chrono::seconds>(-1500ms).count() << std::endl; std::cout << "-1.6s: " << std::chrono::duration_cast<std::chrono::seconds>(-1600ms).count() << std::endl; std::cout << "floor:" << std::endl; std::cout << "1.4s: " << std::chrono::floor<std::chrono::seconds>(1400ms).count() << std::endl; std::cout << "1.5s: " << std::chrono::floor<std::chrono::seconds>(1500ms).count() << std::endl; std::cout << "1.6s: " << std::chrono::floor<std::chrono::seconds>(1600ms).count() << std::endl; std::cout << "-1.4s: " << std::chrono::floor<std::chrono::seconds>(-1400ms).count() << std::endl; std::cout << "-1.5s: " << std::chrono::floor<std::chrono::seconds>(-1500ms).count() << std::endl; std::cout << "-1.6s: " << std::chrono::floor<std::chrono::seconds>(-1600ms).count() << std::endl; return 0; }
.
duration_cast: 1.4s: 1 1.5s: 1 1.6s: 1 -1.4s: -1 -1.5s: -1 -1.6s: -1 floor: 1.4s: 1 1.5s: 1 1.6s: 1 -1.4s: -2 -1.5s: -2 -1.6s: -2
https://wandbox.org/permlink/SsmpRz6RkvbL6Sru
0x5453
source share