Rozważmy następujący kod (LWS):g ++ kontra Intel/Clang argument przekazujący zamówienie?
#include <iostream>
#include <chrono>
inline void test(
const std::chrono::high_resolution_clock::time_point& first,
const std::chrono::high_resolution_clock::time_point& second)
{
std::cout << first.time_since_epoch().count() << std::endl;
std::cout << second.time_since_epoch().count() << std::endl;
}
int main(int argc, char* argv[])
{
test(std::chrono::high_resolution_clock::now(),
std::chrono::high_resolution_clock::now());
return 0;
}
trzeba go uruchomić kilka razy, ponieważ czasami nie ma widocznej różnicy. Ale kiedy jest widoczna różnica w czasie między oceną first
i second
, wynik jest następujący pod g ++:
1363376239363175
1363376239363174
i następujący pod Intel i brzękiem:
1363376267971435
1363376267971436
oznacza to, że w g ++ argument second
jest oceniany jako pierwszy, a pod intel i clang najpierw oceniany jest argument .
Który z nich jest zgodny ze standardem C++ 11?
Dokładny sposób na ustalenie kolejności oceny. – GManNickG