C++ 用户定义的文字运算符(constexpr构造函数)
我正在实现一个类,它定义了一个复数,并带有可能的算术运算。现在,我正在尝试编写一个用户定义的文本运算符:C++ 用户定义的文字运算符(constexpr构造函数),c++,c++11,g++,clang,C++,C++11,G++,Clang,我正在实现一个类,它定义了一个复数,并带有可能的算术运算。现在,我正在尝试编写一个用户定义的文本运算符: constexpr Complex operator "" _i(long double arg) { return Complex{0.0, arg}; } 这让我可以写以下内容: Complex c = 1.0 + 5.0_i; 为此,我必须实现一个与之配套的constexpr构造函数: constexpr Complex(double real, double imagin
constexpr Complex operator "" _i(long double arg) {
return Complex{0.0, arg};
}
这让我可以写以下内容:
Complex c = 1.0 + 5.0_i;
为此,我必须实现一个与之配套的constexpr构造函数:
constexpr Complex(double real, double imaginary) : re(real), im(imaginary) {};
其中re和im是成员变量。在g++中编译时,这很好,但在使用clang时,会出现以下错误:
error: constexpr function never produces a constant expression[-Winvalid-constexpr]
我做错什么了吗?g++的限制性比clang小吗
整个实施过程如下:
class Complex {
private:
double re;
double im;
public:
// Class constructors
Complex() : re(0.0), im(0.0) {};
Complex(const double real) : re(real) {};
constexpr Complex(const double real, const double imaginary) : re(real), im(imaginary) {};
/* All the overloaded functions etc. below */
};
constexpr Complex
operator "" _i(long double arg) {
return Complex{0.0, arg};
}
我无法重现您的确切错误,但我能够理解为什么不是所有构造函数都是
constepr
?是运算符double+complexconstepr吗?在常量表达式中,缩小转换的格式不正确,尽管您提供的代码不会产生您显示的错误,因为Complex{0.0,arg}
从长双精度缩小到双精度。