小编sta*_*ame的帖子

我在模板类中有多个 * 运算符的重载。为什么按不同的顺序放置声明会得到不同的结果?

我有一个类需要有多个 * 运算符的重载。其中一些需要声明为朋友,以便我可以将类类型作为第二个参数。这是一个遇到我即将提出的问题的类的示例:

#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)

c++ templates overloading class friend

6
推荐指数
2
解决办法
80
查看次数

如何使浮点数显示 -0 也显示为 0?

如果我将浮点 0 除以负值,则会显示 -0,这很不方便。我怎样才能摆脱这个问题?

float a = 0;
std::cout << a / (-1);
Run Code Online (Sandbox Code Playgroud)

我试图检查一个数字是否等于 -0 以及该条件是否为真,将变量乘以 -1。这不起作用,因为 0 等于 -0。

c++

4
推荐指数
1
解决办法
56
查看次数

标签 统计

c++ ×2

class ×1

friend ×1

overloading ×1

templates ×1