C ++多个转换运算符

问题描述 投票:1回答:1

我在下面定义了一个类,带有两个成员变量和两个转换运算符(运算符float和运算符chrono :: microseconds)。但是下面的代码仅在我注释掉float运算符时才有效。否则,它将引发错误(无法转换类型)。我不知道为什么吗?

#include <iostream>
#include <string>
#include <chrono>

using namespace std::chrono_literals;

class Peak {
public:
    Peak (std::chrono::microseconds t,
      float magnitude)
  :t_(t),
   magnitude_(magnitude){
  };

  std::chrono::microseconds get_t(){return t_;}
  //operator float(){return magnitude_;}
  operator std::chrono::microseconds(){
      return t_;
  }
private:
  std::chrono::microseconds t_{2us};
  float magnitude_;
};

int main()
{
  Peak a{3us, 100};
  std::cout << "t is "<<static_cast<std::chrono::microseconds>(a).count();
}
c++ operator-keyword
1个回答
1
投票

看起来像GCC 7.3及更高版本中的编译器错误。解决方法似乎正在使用-std=c++17标志进行构建。另外,使float转换运算符explicit也可以对其进行修复:

explicit operator float() const { return magnitude_; }

(顺便说一下,标记这些const总是一个好主意。]

更新:

实际上,仅使这些运算符为const似乎已经对其进行了修复,而无需将float设置为explicit或使用-std=c++17进行构建。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.