关于在c ++库中实现Complex的问题?

时间:2017-10-13 11:21:24

标签: c++

我在MSVC中找到Complex的operator +返回非const 复杂

_TMPLT(_Ty) inline
    _CMPLX(_Ty) operator+(const _Ty& _Left,
        const _CMPLX(_Ty)& _Right)
    {   // add complex to real
    _CMPLX(_Ty) _Tmp(_Left);
    return (_Tmp += _Right);
    }

此外,在cppreference中,它也是非常量

template< class T >
complex<T> operator+( const complex<T>& lhs, const complex<T>& rhs);
(1) 
template< class T >
complex<T> operator+( const complex<T>& lhs, const T& rhs);
(2) 
template< class T >
complex<T> operator+( const T& lhs, const complex<T>& rhs);
(3) 
template< class T >
complex<T> operator-( const complex<T>& lhs, const complex<T>& rhs);
(4) 
template< class T >
complex<T> operator-( const complex<T>& lhs, const T& rhs);
(5) 
template< class T >
complex<T> operator-( const T& lhs, const complex<T>& rhs);
(6) 
template< class T >
complex<T> operator*( const complex<T>& lhs, const complex<T>& rhs);
(7) 
template< class T >
complex<T> operator*( const complex<T>& lhs, const T& rhs);
(8) 
template< class T >
complex<T> operator*( const T& lhs, const complex<T>& rhs);
(9) 
template< class T >
complex<T> operator/( const complex<T>& lhs, const complex<T>& rhs);
(10)    
template< class T >
complex<T> operator/( const complex<T>& lhs, const T& rhs);
(11)    
template< class T >
complex<T> operator/( const T& lhs, const complex<T>& rhs);

然后有人认为它应该是 const

但是,我想不出这种导致非常规必要性的情况。

有人能告诉我这种情况吗?感谢

1 个答案:

答案 0 :(得分:2)

你误解了你所关联的问题和答案。

答案没有说明函数的返回值。答案讨论传递给函数的参数,并正确地建议参数作为常量引用和常量指针传递如果该函数不改变这些参数

  • 如果该函数不改变参数,则应将参数作为const引用传递
  • 如果该函数不改变调用它的对象,则
  • 函数应声明为const

没有理由operator + (const T& a , const T& b)返回const对象,这样做可能会阻止重要的优化。