2

並列プログラミングに関するこの記事を読んreturnでいて、よくわからない文に出くわしました。名前空間Boost::Chrono::steady_clockについて読んだことがありますが、実際にはどちらも使用したことはありませんが、その目的は理解しています。

run_testsこれは、私を困惑させる関数で見つかったコード行です。

return boost::chrono::duration <double, boost::milli> (end - start).count();

ここで正確に何が起こっているのですか?オブジェクト名を前に置くべきではありません.count()か? -Chronoでオペレーターのオーバーロードはありますか?

完全なコードはここにあります

4

5 に答える 5

9
       boost::chrono::duration

クラステンプレートの名前です。

       boost::chrono::duration <double, boost::milli>

クラス テンプレート、つまりクラスのインスタンス化です。

       boost::chrono::duration <double, boost::milli> (end - start)

その型の一時オブジェクトを作成し、式の値で初期化しますend-start

       boost::chrono::duration <double, boost::milli> (end - start).count()

.count()一時オブジェクトのメソッドを呼び出します。

return boost::chrono::duration <double, boost::milli> (end - start).count();

メソッドの結果を返します.count()

于 2013-02-05T21:36:48.033 に答える
6

これだけ:boost::chrono::duration <double, boost::milli> (end - start)オブジェクトを構築するのと同じint(x)です。

次に.count()、その (一時的な) オブジェクトで呼び出され、そこからの戻り値が返されます。

于 2013-02-05T21:34:56.037 に答える
2

ここには 3 つの部分があります。最初の部分は単純end - startです。私は Boost に詳しくありませんが、それに賭けてendstartオーバーロードを実行operator-()して 2 倍を減算し、boost:chrono:duration<>オブジェクトを生成します。

このオブジェクトは、コンストラクター for に渡されboost::chrono::duration<double, boost::milli>ます。これは、減算が提供する形式から、このテンプレートに見られる形式、つまりdoubleミリ秒を表す精度の期間に期間を変換するのに役立つと思います。

最後に、.count()このオブジェクトでメソッドが呼び出されboost::chrono::duration、おそらく期間の値が数値として返されます (私は と推測していますdouble)。

于 2013-02-05T21:35:37.577 に答える
1

このコードは最初に typeの一時的な名前のないboost::chrono::duration<double, boost::milli>オブジェクトを構築し、そのオブジェクトのコンストラクターに何でも渡しend - startます。

count()次に、この新しい名前のないオブジェクトでメソッドを呼び出します。

そのメソッドが返すものは何でも、この関数が返すものです。

于 2013-02-05T21:36:24.320 に答える
1

実際durationにはデータ型であり(end - start)、コンストラクターのパラメーターに評価されます。

次にcount()、構築されたオブジェクトで呼び出され、たまたま へdoubleの最初のtypenameパラメータである を返しますduration。( duration <double, boost::milli>)

于 2013-02-05T21:35:33.770 に答える