Xét đoạn mã sau (LWS):g ++ vs intel/clang đối số thông qua thứ tự?
#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;
}
Bạn phải chạy nó nhiều lần bởi vì đôi khi, không có khác biệt rõ ràng. Nhưng khi có sự khác biệt rõ ràng giữa thời điểm đánh giá của first
và second
, kết quả là sau dưới g ++:
1363376239363175
1363376239363174
và sau đây dưới intel và kêu vang:
1363376267971435
1363376267971436
Nó có nghĩa là dưới g ++, đối số second
được đánh giá đầu tiên, và bên dưới intel và clang đối số first
được đánh giá trước tiên.
Điều nào là đúng theo tiêu chuẩn C++ 11?
Cách gọn gàng để tìm thứ tự đánh giá. – GManNickG