确定数字是否复杂C++

Identify if the number is complex C++

本文关键字:复杂 C++ 是否 数字      更新时间:2023-10-16

如何识别C++中的数字是否复杂?

有没有这样的内置函数?

isComplex(1)->false

C++是一种强类型语言,文字1始终是int

您询问的确定在转换文本时可能相关... isComplex("1") ,为此您可以尝试流式传输:

std::istringstream iss(some_text);
std::complex<double> my_complex;
char c;
if (iss >> my_complex &&  // conversion possible...
    !(iss >> c))          // no unconverted non-whitespace characters afterwards
    ...use my_complex...
else
    throw std::runtime_error("input was not a valid complex number");

另外,如果您在模板中并且不确定类型参数是否std::complex,则可以使用 例如 std::is_same<T, std::is_complex<double>>::value ,例如:

#include <iostream>
#include <complex>
#include <type_traits>
using namespace std;
double get_real(double n) { return n; }
double get_real(const std::complex<double>& n) { return n.real(); }
template <typename T>
std::complex<double> f(T n)
{
    if (std::is_same<T, std::complex<double>>::value)
        return n * std::complex<double>{1, -1} + get_real(n);
    else
        return -n;
}

int main()
{
    std::cout << f(std::complex<double>{10, 10}) << 'n';
    std::cout << f(10.0) << 'n';
}

输出:

(30,0)
(-10,0)

请参阅此处的代码。

对于更复杂的函数,您可能希望创建单独的重载,例如 doublestd::complex<double>,和/或floatstd::complex<float>long double等。