7

次のコード ( 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;
}

目に見える違いがない場合があるため、数回実行する必要があります。firstしかし、との評価時間の間に目に見える違いがある場合second、結果は g++ の下で次のようになります。

1363376239363175
1363376239363174

および intel および clang の下の以下:

1363376267971435
1363376267971436

これは、g++ ではsecond引数が最初に評価され、intel と clang ではfirst引数が最初に評価されることを意味します。

C++11 標準に従って正しいのはどれですか?

4

2 に答える 2

14

C++11 標準に従って正しいのはどれですか?

どちらも許容されます。標準を引用するには(§8.3.6):

関数の引数の評価順序は規定されていません。

于 2013-03-15T19:41:49.840 に答える