对于以下结构
struct TestClass {
TestClass() : mat(Eigen::Matrix3i::Zero()) {}
Eigen::Matrix3i mat;
};
Run Code Online (Sandbox Code Playgroud)
我想有一个重载operator<<打印mat成员std::cout.我试过了
std::ostream& operator<<(std::ostream& out, const TestClass& object) {
out << object.mat;
}
Run Code Online (Sandbox Code Playgroud)
这导致了段错误.任何人都可以向我解释原因吗?
一个最小的工作示例:
#include <iostream>
#include <Eigen/Core>
struct TestClass {
TestClass() : mat(Eigen::Matrix3i::Zero()) {}
Eigen::Matrix3i mat;
};
std::ostream& operator<<(std::ostream& out, const TestClass& object) {
out << object.mat;
}
int main() {
TestClass testObject;
std::cout << testObject.mat << "\n\n"; // This works fine.
std::cout << testObject << '\n'; // This results in a …Run Code Online (Sandbox Code Playgroud) 我不明白为什么std::future::wait_for当指定的持续时间增加时,呼叫时测量的持续时间和指定的持续时间之间的差异会增加。
当我告诉a std::future等待10ns并测量经过的时间时,我得到〜2000ns。现在,10ns的持续时间非常短,因此可能要等待很短的时间,而相关的函数调用会涉及过多的开销。但是当我告诉a std::future等待100000ns并测量经过的时间时,我得到〜150000ns。当分别等待10和100微秒时,可以看到类似的效果。
#include <chrono>
#include <future>
#include <iostream>
#include <thread>
using namespace std::chrono;
using namespace std::chrono_literals;
void f() { std::this_thread::sleep_for(1s); }
int main() {
steady_clock::time_point start, end;
std::future<void> future = std::async(std::launch::async, f);
start = steady_clock::now();
future.wait_for(10ns);
end = steady_clock::now();
std::cout << "10 -> " << (end - start).count() << '\n';
start = steady_clock::now();
future.wait_for(100000ns);
end = steady_clock::now();
std::cout << "100000 -> " << (end - start).count() << '\n';
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我g++ future_test.cpp …