complex<double>类默认构造函数存疑?请求解析代码异常行为
关于std::complex构造函数的疑问解答
嘿,我来帮你理清这个问题~
首先你查到的complex<double>构造函数定义是完全正确的:complex (double re = 0.0, double im = 0.0);,这个构造函数的默认参数设计就是为了让我们能灵活创建复数对象。
针对你代码里的疑问:complex<double> cmp2(1); 完全等同于 complex<double> cmp2(1, 0.0);。原因很简单:当你只传入一个参数时,编译器会自动使用第二个参数的默认值0.0来初始化虚部,所以cmp2的实部是1.0,虚部是0.0,和你手动传入0作为第二个参数的结果毫无区别。
如果之前你觉得它的行为“异常”,可能是测试输出的时候出了小问题?比如你可以试试用下面的代码验证:
cout << "cmp2的实部:" << cmp2.real() << ",虚部:" << cmp2.imag() << endl;
运行后应该会输出cmp2的实部:1,虚部:0,这就证明了两者的等价性。
补充个小知识点:C++标准里的std::complex模板对浮点类型的构造逻辑就是这样的——单个实数参数会被用来初始化实部,虚部默认置0;无参数则实部虚部都为0;两个参数则分别对应实部和虚部。
内容的提问来源于stack exchange,提问作者ynn
相关产品推荐
相关产品推荐

