以下代码与VS2010打印0,与我的期望相反:
#include <complex>
#include <iostream>
using namespace std;
int main(void)
{
complex<int> z(20, 200);
cout << abs<int>(z) << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它的类型是正常的double.
我想知道如何定义类my_int,以便int中的转换std::complex< my_int >由编译器完成,而不是由我手动完成.
如果4未转换为" my_int",则以下程序无法编译
// Example program
#include <iostream>
#include <string>
#include <complex>
struct my_int
{
my_int() : _i(0) {}
my_int(const my_int& mi) : _i(mi._i) {}
my_int(int i) : _i(i) {}
operator int(){return _i;}
int _i;
};
std::ostream& operator<<(std::ostream& os, const my_int& mi)
{
os << mi._i;
return os;
}
int main()
{
std::complex<my_int> ci = 4; // Casting 4 to my_int works
std::cout << ci;
}
Run Code Online (Sandbox Code Playgroud)
我知道,如果你初始化ci与std::complex<my_int> ci(4)它的工作原理,但我想它与拷贝初始化工作.