![](/img/trans.png)
[英]Does Visual Studio 2013 provide an improvement on c++11's high_performance_clock?
[英]C++11 chrono in visual studio 2013
我正在将代码从Linux移植到Window。
并且在使用std :: chrono时我没有想到会出现错误。
由于std :: chrono是C ++标准库,我预计它无需修改即可正常工作。
下面是显示错误的代码。
错误发生在我使用带有duration实例的运算符和duration_cast函数with no instance of function template
。
在Linux中,代码正常工作
std::string ChronoTimer::currentTime(){
using namespace std::chrono;
auto now = system_clock::now();
time_point<system_clock> epoch;
microseconds ms = duration_cast<milliseconds>(now - epoch);
hours hour = duration_cast<hours>((ms % hours(24)) + hours(9));
minutes min = duration_cast<minutes>(ms % hours(1));
seconds sec = duration_cast<seconds>(ms % minutes(1));
milliseconds msec = duration_cast<milliseconds>(ms % seconds(1));
std::stringstream strStream;
strStream << std::setfill('0') << std::setw(2) << hour.count() << ":";
strStream << std::setfill('0') << std::setw(2) << min.count() << ":";
strStream << std::setfill('0') << std::setw(2) << sec.count() << ".";
strStream << std::setfill('0') << std::setw(3)<< msec.count();
return strStream.str();
}
1 IntelliSense: no instance of function template "std::chrono::duration_cast" matches the argument list
argument types are: (<error-type>)
2 IntelliSense: no operator "+" matches these operands
operand types are: std::chrono::system_clock::rep + std::chrono::hours
3 IntelliSense: no instance of function template "std::chrono::duration_cast" matches the argument list
argument types are: (std::chrono::system_clock::rep)
下面我发布一个专注于你的问题的SSCCE :
#include <chrono>
using namespace std::chrono;
int main() {
auto now = system_clock::now();
time_point<system_clock> epoch;
microseconds ms = duration_cast<milliseconds>(now - epoch);
microseconds hs = std::chrono::hours(1);
auto mm = ms % hs;
}
虽然上面的例子适用于GCCv4.9和CLANGv3.4 。 它无法在VS2013中编译。
错误报告VC ++无法将std::chrono::microseconds
转换为std::chrono::system_clock::rep
。
似乎实现者正在弄乱转换,我认为这是一个应该报告的可视化C ++错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.