请考虑以下代码(
LWS):
#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; }
你必须多次运行它,因为有时,没有明显的区别.但是当第一次和第二次评估的时间之间存在明显差异时,结果如下:
1363376239363175 1363376239363174
以及英特尔和clang下的以下内容:
1363376267971435 1363376267971436
这意味着在g下,首先评估第二个参数,在intel和clang下,首先评估第一个参数.
根据C 11标准,哪一个是真的?
解决方法
Which one is true according to the C++11 standard ?
两者都是允许的.引用标准(§8.3.6):
The order of evaluation of function arguments is unspecified.