c – g vs intel / clang参数传递顺序?

前端之家收集整理的这篇文章主要介绍了c – g vs intel / clang参数传递顺序?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
请考虑以下代码( 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.

猜你在找的C&C++相关文章