私はstart1
とend1
はauto
型で定義する必要があることに気づきました。
これらは、HAVEではありませんが、特に複雑なテンプレートタイプの場合には便利です。
しかし、同じステートメントで変数を初期化せずにauto
変数を宣言することはできません。それ以外の場合は、データ型を推測することはできません。あなたがしようとしたように、別のステートメントから型を推論することはできません。
代わりにこれを試してみてください:
auto start1 = std::chrono::high_resolution_clock::now();
...
auto end1 = std::chrono::high_resolution_clock::now();
を私は明示的にタイプstd::chrono::time_point
表現end1 - start1
でそれらを定義した場合、私与え、「二項演算子 『 - 』に適用することはできません...」。あなたは、そのテンプレートパラメータの任意の値を提供していない
template<
class Clock,
class Duration = typename Clock::duration
class time_point;
:
std::chrono::time_point
は、テンプレートの種類です。
std::chrono::high_resolution_clock::now()
は、std::chrono::time_point<std::chrono::high_resolution_clock>
を返します。あなたが割り当てからの宣言を分離したい場合は、
std::chrono::time_point<std::chrono::high_resolution_clock> start1 = std::chrono::high_resolution_clock::now();
...
std::chrono::time_point<std::chrono::high_resolution_clock> end1 = std::chrono::high_resolution_clock::now();
または::あなたはauto
を使用しない場合、あなたはあなたの変数宣言でその完全な型を指定する必要が
std::chrono::time_point<std::chrono::high_resolution_clock> start1;
std::chrono::time_point<std::chrono::high_resolution_clock> end1;
start1 = std::chrono::high_resolution_clock::now();
...
end1 = std::chrono::high_resolution_clock::now();
あなたが簡素化することができます
using hi_res_clock = std::chrono::high_resolution_clock;
using hi_res_time_point = std::chrono::time_point<std::chrono::high_resolution_clock>;
:少し
using
の別名を持つもの彼らは
auto
で定義されている場合
hi_res_time_point start1 = hi_res_clock::now();
...
hi_res_time_point end1 = hi_res_clock::now();
hi_res_time_point start1;
hi_res_time_point end1;
start1 = hi_res_clock::now();
...
end1 = hi_res_clock::now();
のはなぜstart1
とend1
上の算術演算子を使用することができますか?
その種類は完全にコンパイラに知られているであろう、そしてtime_point
値に作用する適切なoperator-
を解決することができるようになりますので。
auto
は、算術演算子と互換性のあるものに自動的にキャストしますか?
auto
は、コンパイラがコンパイル時にその変数に割り当てられているものに基づいて、変数のデータ型を自動推論できるように簡略化したものです。
私はauto
がちょうどstd::chrono::high_resolution_clock::now()
戻りタイプが何であるかを見るために、コンパイラの省略形であるべきと思いました!
これはまさにその動作です。あなたはちょうどauto
を正しく使用していませんでした。
['time_point'](http://en.cppreference.com/w/cpp/chrono/time_point)はクラステンプレートです。 – juanchopanza
'std :: chrono :: high_resolution_clock :: time_point'を使うと、うまく動作します。(http://coliru.stacked-crooked.com/a/3161124e7abf8f26) – jaggedSpire
@jaggedSpireああ神様!ありがとう...これを監督したに違いない... – daniel451