2017-12-16 7 views
3

私はこのような何か試してみました:time_pointに再生時間を追加するにはどうすればよいですか?

using clock = std::chrono::system_clock; 
clock::time_point nowp = clock::now(); 
clock::time_point end = nowp + std::chrono::seconds(10); 
time_t nowt = clock::to_time_t (nowp); 
time_t endt = clock::to_time_t (end); 
std::cerr << " " << ctime(&nowt) << " " << ctime(&endt) << std::endl; 

をしかし、それは印刷します。

Sat Dec 16 15:06:43 2017 
Sat Dec 16 15:06:43 2017 

私はここで間違って何をしているのですか?今10秒はどうやって追加しますか?

+0

こと;

コードと操作を分割することにより評価の順序を強制することですあなたのコードは動作します: 'Sat Dec 16 16:26:27 2017 Sat Dec 16 16:26:37 2017' – Vorac

+0

[Howard Hinnantの日時ライブラリ](https://github.com/HowardHinnant/date)を参照してくださいより簡単な方法クロノオブジェクトを印刷します。 –

答えて

4

ctimeストアは静的な記憶領域を作成し、ポインタを返します。

したがって、1つの結果を別のものに上書きし、2回印刷します。内部バッファに表現を保存し、そのポインタを返す一つの引数、と

  1. コールctime:操作の 注文はそれがないので、何を標準で固定されていません。
  2. ctimeを別の引数で呼び出すと、同じ内部バッファに表現が保存され、ポインタが返されます。両方チャーから
  3. プリント値*の(実際には同じポインタ)

ソリューションは私のためfixes problem for me

#include <iostream> 
#include <chrono> 
using namespace std; 


int main() { 
    using clock = std::chrono::system_clock; 
    clock::time_point nowp = clock::now(); 
    clock::time_point end = nowp + std::chrono::seconds(10); 
    time_t nowt = clock::to_time_t (nowp); 
    time_t endt = clock::to_time_t (end); 
    std::cout << " " << ctime(&nowt) << "\n"; 
    std::cout << ctime(&endt) << std::endl; 
    return 0; 
} 
関連する問題