C++ 如何在C++;

C++ 如何在C++;,c++,complex-numbers,C++,Complex Numbers,在C语言中,我能够使用CMPLX在表达式中使用复数: #include <complex.h> int main(){ double _Complex result; //complicated code result = ((3.1*CMPLX(0.,1.))+2.); return 0; } #包括 int main(){ 双重复杂结果; //复杂代码 结果=((3.1*CMPLX(0,1.))+2.); 返回0; } #include <

在C语言中,我能够使用
CMPLX
在表达式中使用复数:

#include <complex.h>

int main(){

    double _Complex result;
    //complicated code
    result = ((3.1*CMPLX(0.,1.))+2.);

return 0;
}
#包括
int main(){
双重复杂结果;
//复杂代码
结果=((3.1*CMPLX(0,1.))+2.);
返回0;
}
<如何在C++中执行同样的操作?< /P>
#include <complex>

int main(){

    std::complex<double> result;
    //complicated code
    result = ((3.1*???(0.,1.))+2.);   // what to put in '???'

return 0;
}
#包括
int main(){
复杂结果;
//复杂代码
结果=((3.1*?(0,1.))+2.);//在“?”中放什么
返回0;
}

有什么简短的东西我可以填进去吗??我不想用
+
操作来编写它:
0.0+1.0i

最简单的方法是创建一个
复杂的
文本

#include<complex>
using namespace std::literals;

auto result = (3.1 * 1if) + 2;
#包括
使用名称空间std::literals;
自动结果=(3.1*1if)+2;
或者,如果没有C++14,调用类的构造函数将创建一个临时

auto result = (3.1 * std::complex<double>{0, 1}) + 2;
autoresult=(3.1*std::complex{0,1})+2;

最简单的方法是创建一个
复合体
文本

#include<complex>
using namespace std::literals;

auto result = (3.1 * 1if) + 2;
#包括
使用名称空间std::literals;
自动结果=(3.1*1if)+2;
或者,如果没有C++14,调用类的构造函数将创建一个临时

auto result = (3.1 * std::complex<double>{0, 1}) + 2;
autoresult=(3.1*std::complex{0,1})+2;
您可以创建一个类型别名,使
std::complex
类型更易于使用

例如:

#include <complex>
#include <iostream>

// create a type alias
using CMPLX = std::complex<double>;

int main()
{
    // use it the same way you did in `C`
    auto result = ((3.1 * CMPLX(0.0, 1.0)) + 2.0);

    std::cout << "result: " << result << '\n';
}
您可以创建一个类型别名,使
std::complex
类型更易于使用

例如:

#include <complex>
#include <iostream>

// create a type alias
using CMPLX = std::complex<double>;

int main()
{
    // use it the same way you did in `C`
    auto result = ((3.1 * CMPLX(0.0, 1.0)) + 2.0);

    std::cout << "result: " << result << '\n';
}


你不能用原来的C而不是。不确定这是否是好的做法though@ElijahSeedArita谢谢,我想做得很好,因为我将与一群人分享我的代码,他们将在此基础上进行构建。人们会期望
std::complex
。你为什么要写
(3.1*CMPLX(0,1.))+2。
而不是
CMPLX(2,3.1)
。你为什么对
感到满意也不清楚(3.1*CMPLX(0,1.)+2.
,但对
3.1*I+2不满意。
您不能只使用原始的C而不是。不确定这是否是一种好的做法though@ElijahSeedArita谢谢,我想把它做好,因为我将与一群人分享我的代码,他们将在此基础上进行构建。人们会期望
std::complex
。你为什么要编写
(3.1*CMPLX(0,1.)+2.
而不是
CMPLX(2,3.1)
同样不清楚为什么你对
(3.1*CMPLX(0,1.)+2.
感到满意,但对
3.1*I+2不满意。
好吧,听起来不错;我不能使用C++14。但你是说
std::complex(0,1)吗
,带括号和
std::
前缀?键入它似乎太长了。我想知道他们为什么要这么长。在Fortran(
DCMPLX
)和C(
CMPLX
)中更好@QuantumDot是的
std::
,但是花括号是故意的,虽然不必要。它长的原因是为了避免名称冲突。如果你只使用
std::complex
,你可以使用complex=std::complex将它别名为
,但它不是用花括号编译的。clang给出了这个错误:
错误:预期的('for function style cast或type construction
。你确定吗?(另外,最后的
2
应该是
2.
,对吗?)@QuantumDot你需要C++11来完成这项工作。
也可以。好的,听起来不错;我不能使用C++14。但是你的意思是
std::complex(0,1)
,带括号和
std::
前缀?键入它似乎太长了。我想知道他们为什么要这么长。在Fortran(
DCMPLX
)和C(
CMPLX
)中更好@QuantumDot是的
std::
,但是花括号是故意的,虽然不必要。它长的原因是为了避免名称冲突。如果你只使用
std::complex
,你可以使用complex=std::complex
将它别名为
,但它不是用花括号编译的。clang给出了这个错误:
错误:预期的('对于函数样式转换或类型构造
。您确定吗?(另外,最后的
2
应该是
2。
,对吗?@QuantumDot您需要C++11来完成此操作。
也很好。好的,很好。类型别名仅限于这一个文件吗?@QuantumDot如果你有一个多文件项目,那么将类型别名放在头文件中,
#将它包括在你需要的任何地方。好的,很好。类型别名仅限于这一个文件吗?@QuantumDot如果你有一个多文件项目,那么将类型别名放在头文件中pe别名在头文件中,并在需要时包含它。