提问人:Abm 提问时间:10/26/2023 更新时间:10/27/2023 访问量:133
在 C++ 中使用计时和打印结果对函数进行计时
Timing a function in C++ using chrono and printing result
问:
我正在尝试在 C++ 中对函数进行计时。为此,我已经测试了以下代码
#include <chrono>
#include <iostream>
int main()
{
auto t = std::chrono::high_resolution_clock::now();
std::cout << t.time_since_epoch() << '\n';
}
我尝试通过以下方式在我的控制台中编译它
clang++ -std=c++20 -stdlib=libc++ test3.cpp -o test5
因为我的C++文件名是test3.cpp。但是,当它尝试编译代码时,它给了我一长串错误:
test3.cpp:7:15: error: invalid operands to binary expression ('std::ostream' (aka 'basic_ostream<char>') and 'std::chrono::time_point<std::chrono::steady_clock, std::chrono::duration<long long, std::ratio<1, 1000000000>>>::duration' (aka 'std::chrono::duration<long long, std::ratio<1, 1000000000>>'))
std::cout << t.time_since_epoch() << '\n';
~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/cstddef:116:3: note: candidate function template not viable: no known conversion from 'std::ostream' (aka 'basic_ostream<char>') to 'std::byte' for 1st argument
operator<< (byte __lhs, _Integer __shift) noexcept
当我用字符串替换 t.time_since_epoch() 时,它完全可以正常工作。另外,如果我用 t.time_since_epoch() 在脚本中定义一个变量,即
#include <chrono>
#include <iostream>
int main()
{
auto t = std::chrono::high_resolution_clock::now();
auto t2 = t.time_since_epoch();
std::cout << "test" << '\n';
}
编译时没有错误。所以看起来 t.time_since_epoch() 有效,但我的 cout-function 不知道如何打印它。关于如何解决这个问题的任何想法?根据这篇文章:std::chrono 和 cout 代码应该可以工作。
答:
2赞
Howard Hinnant
10/27/2023
#1
您的代码是合法的 C++20。不幸的是,libc++ 尚未实现 C++20 的这一部分。
您可以使用我的免费、开源、仅标头的 C++20 计时预览库作为解决方法,直到您的供应商完全实现 C++20:
#include "date/date.h" // add this
#include <chrono>
#include <iostream>
int main()
{
using date::operator<<; // add this
auto t = std::chrono::high_resolution_clock::now();
std::cout << t.time_since_epoch() << '\n';
}
输出示例:
1666477458303541ns
上一个:质数之和 [已关闭]
下一个:std::cout 上的分段错误
评论