C++多个转换运算符



我用两个成员变量和两个转换运算符(运算符float和运算符chrono::微秒(定义了一个类,如下所示。但是下面的代码只有当我注释掉float运算符时才有效。否则,它将抛出一个错误(无法转换类型(。我不明白为什么?

#include <iostream>
#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_; }
//have to comment this out or I get an error
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进行构建。

相关内容

  • 没有找到相关文章

最新更新