我目前正在处理复数。我需要一些东西来代表虚构的单位。为此,一种方法是定义一个变量
std::complex<double> imaginary_unit{0, 1};然而,我发现有一个内置的虚构单元i。例如,在问题here中讨论了这个单元。
建议的解决方案如下:
#include <complex>
using namespace std::complex_literals;然后使用常数i,如下所示:
std::complex<double> z1 = 1i * 1i;下面是两个失败的例子:
// 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或using namespace的情况下访问常量i
发布于 2021-09-19 18:44:32
你可以这样创建你的单位常量:
constexpr auto imaginary_unit = std::literals::complex_literals::operator""i(1.L);..。但是,如果您不使用文字名称空间,则std::complex<double> imaginary_unit{0, 1};更可取。它更短,更容易阅读。
...常量
i...
i不是常量。它是一个用户定义的文字。一种可能的实现:
constexpr std::complex<double> operator""i(long double d) {
return std::complex<double>{0.0, static_cast<double>(d)};
}我认为你不应该害怕using文字名称空间。它们的存在是为了简化生活。
https://stackoverflow.com/questions/69245917
复制相似问题