c++ - 如何在没有 "using namespace std::complex_literals"的情况下访问虚数单位?

标签 c++ namespaces constants complex-numbers std

我目前正在处理复数。我需要一些东西来代表虚数单位。一种方法是定义一个变量

std::complex<double> imaginary_unit{0, 1};

但是,我发现有一个内置的虚数单位i。例如,在问题 here 中讨论了该单元。 .

建议的解决方案如下:

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

然后使用常量i,如下所示:

std::complex<double> z1 = 1i * 1i;

我被告知使用命名空间是一种不好的风格,会给使用我的 header 的人带来问题。我试图以详细的方式访问这个内置常量i,但到目前为止我还没有成功。下面是两个失败的例子:

// error: namespace std::literals::complex_literals has no member i
std::literals::complex_literals::i
// error: more than one instance of overloaded function
std::literals::complex_literals::operator""i(3.0) 

如何在不定义自己的 i使用命名空间的情况下访问常量 i

最佳答案

您可以像这样创建单位常数:

constexpr auto imaginary_unit = std::literals::complex_literals::operator""i(1.L);

...但是如果您不使用文字命名空间,std::complex<double> imaginary_unit{0, 1};是优选的。它更短,更容易阅读。

... the constant i ...

i不是一个常数。它是用户定义的文字。一种可能的实现:

constexpr std::complex<double> operator""i(long double d) {
    return std::complex<double>{0.0, static_cast<double>(d)};
}

我认为你不应该害怕using文字命名空间。它们的存在是为了简化生活。

关于c++ - 如何在没有 "using namespace std::complex_literals"的情况下访问虚数单位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69245917/

相关文章:

c# - 不同命名空间中的部分类

c - "unsigned ux = 2147483648;"中常量的类型

c++ - 有哪些技术或工具可用于分析 C/C++ 应用程序中过大的代码大小?

c++ - 我可以在 SDL 窗口外跟踪我的鼠标位置吗?

c++ - boost 异步TCP服务器写入错误

c++ - QSerialPort - 等待来自发件人的全部数据

Ubuntu autoload_register 上的 PHP 和命名空间问题

使用变量调用 Javascript 命名空间

c# - 我们如何定义字符串常量而不是数组

c++ - const 正确性警告 c++