use*_*876 0 c++ overloading class constexpr
我确实理解constexpr在运行时可以计算的表达式上使用它时的用法.
我想为复数创建一个constexpr.x = 5_i应该创建一个复杂数量的我自己创建的复杂类,并且我需要一个constantexpr constructor.
class Complex {
private:
double real_;
double imag_;
public:
...
Complex(double real, double imaginary);
constexpr Complex(double real, double imaginary):
real_(real),imag_(imaginary) {};
//Nonmember function
constexpr Complex operator""_i(long double arg);
Run Code Online (Sandbox Code Playgroud)
在Complex(double real, double imaginary);稍后在.cpp文件中定义的.
当我尝试编译它时,我收到以下错误:
‘constexpr Complex::Complex(double, double)’ cannot be overloaded with
‘Complex::Complex(double, double)’
Run Code Online (Sandbox Code Playgroud)
如果我只定义constexpr函数我的结论是我不能Complex::Complex(double, double)在运行时使用.
为什么我不能定义两个不同的功能?这在C++中是不允许的?编译器能否看到两个函数之间的区别?还有其他办法吗?
即使您定义它,constexpr您仍然可以在运行时使用它.您不需要两个不同的重载,也不能只重载constexpr.
在constexpr 用户定义的文本需要constexpr构造函数,这样编译器可以创建和编译时初始化类的对象.constexpr构造函数对构造函数设置了一些限制,但允许常量初始化.
constexpr Complex a = 1.0_i;
const Complex b = 1.0_i;
Run Code Online (Sandbox Code Playgroud)
如果你看看std::complex你会看到它也有constexpr构造函数.
| 归档时间: |
|
| 查看次数: |
294 次 |
| 最近记录: |