我有一个类需要有多个 * 运算符的重载。其中一些需要声明为朋友,以便我可以将类类型作为第二个参数。这是一个遇到我即将提出的问题的类的示例:
#pragma once
template<typename T>
class Example;
template<typename T>
Example<T> operator*(T value, Example<T> obj);
template<typename T>
class Example
{
private:
T m_data;
public:
Example(T);
friend Example operator*<T>(T, Example);
Example operator*(const T& other);
};
template<typename T>
Example<T> operator*(T value, Example<T> obj)
{
return value * obj.m_data;
}
template<typename T>
Example<T>::Example(T data) :m_data(data) { }
template<typename T>
Example<T> Example<T>::operator*(const T& other)
{
return Example(m_data * other.m_data);
}
Run Code Online (Sandbox Code Playgroud)
这有效,但如果我改变:
template<typename T>
class Example
{
private:
T m_data;
public:
Example(T);
friend Example …Run Code Online (Sandbox Code Playgroud) 如果我将浮点 0 除以负值,则会显示 -0,这很不方便。我怎样才能摆脱这个问题?
float a = 0;
std::cout << a / (-1);
Run Code Online (Sandbox Code Playgroud)
我试图检查一个数字是否等于 -0 以及该条件是否为真,将变量乘以 -1。这不起作用,因为 0 等于 -0。