Sch*_*aki 4 c++ mingw std c++11
运行以下
#include <iostream>
#include <complex>
int main()
{
std::complex<double> i (0,1);
std::complex<double> comp =pow(i, 2 );
std::cout<<comp<<std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
给出了没有c ++ 11的预期结果(-1,0).但是,使用c ++ 11进行编译会产生极其烦人的问题(-1,1.22461e-016).
怎么做,什么是最佳做法?
当然,这可以通过地板等手动修复,但我很高兴知道解决问题的正确方法.
SYSTEM:Win8.1,使用Desktop Qt 5.1.1(Qt Creator)和MinGW 4.8 32位.通过在Qt Creator .pro文件中添加标志QMAKE_CXXFLAGS + = -std = c ++ 11来使用c ++ 11.
在C++ 11中,我们有一些新的重载pow(std::complex).海湾合作委员会有两个非标准的超载,一个用于筹集到一个int,一个用于筹集到一个unsigned int.
其中一个新的标准重载(即std::complex</*Promoted*/> pow(const std::complex<T> &, const U &))在使用非标准重载时会导致歧义pow(i, 2).他们的解决方案是#ifdef在存在的情况下对非标准的解决方案C++11,你从调用专用函数(使用连续的平方)到泛型方法(使用pow(double,double)和std::polar).
| 归档时间: |
|
| 查看次数: |
772 次 |
| 最近记录: |