我在下面定义了一个类,带有两个成员变量和两个转换运算符(运算符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();
}
看起来像GCC 7.3及更高版本中的编译器错误。解决方法似乎正在使用-std=c++17
标志进行构建。另外,使float
转换运算符explicit
也可以对其进行修复:
explicit operator float() const { return magnitude_; }
(顺便说一下,标记这些const
总是一个好主意。]
更新:
实际上,仅使这些运算符为const
似乎已经对其进行了修复,而无需将float
设置为explicit
或使用-std=c++17
进行构建。