我目前正在处理复数。我需要一些东西来代表虚数单位。一种方法是定义一个变量
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/