Ответ: нет, вы не можете, но, поскольку значение с плавающей запятой находится слева, вы можете ожидать, что тип результата из «0.5 * a» будет двойным.В этом случае вы можете подумать о преобразовании оператора.Обратите внимание, что «pow (a, b)» добавлен только для иллюстрации идеи.
1 #include <stdio.h>
2 #include <math.h>
3
4 class Complicated
5 {
6 public:
7 Complicated(int a, int b) : m_a(a), m_b(b)
8 {
9 }
10
11 Complicated(double a) : m_a(a)
12 {
13 }
14
15 template <typename T> operator T()
16 {
17 return (T)(pow(10, m_b) * m_a);
18 }
19
20 void Print()
21 {
22 printf("(%f, %f)\n", m_a, m_b);
23 }
24
25 private:
26 double m_a;
27 double m_b;
28 };
29
30
31 int main(int argc, char* argv[])
32 {
33 Complicated pr(1, 2);
34 Complicated c = 5.1 * (double) pr;
35 c.Print();
36 }
37