小编red*_*red的帖子

为什么重载operator <<打印特征类成员导致段错误?

对于以下结构

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)

c++ cout member eigen

11
推荐指数
1
解决办法
755
查看次数

为什么std :: future :: wait_for不等待正确的持续时间?

我不明白为什么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 …

c++ c++11

4
推荐指数
2
解决办法
319
查看次数

标签 统计

c++ ×2

c++11 ×1

cout ×1

eigen ×1

member ×1