首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不“使用名称空间std::complex_literals”的情况下访问虚构单元?

如何在不“使用名称空间std::complex_literals”的情况下访问虚构单元?
EN

Stack Overflow用户
提问于 2021-09-19 18:13:11
回答 1查看 95关注 0票数 2

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

代码语言:javascript
复制
std::complex<double> imaginary_unit{0, 1};

然而,我发现有一个内置的虚构单元i。例如,在问题here中讨论了这个单元。

建议的解决方案如下:

代码语言:javascript
复制
#include <complex>
using namespace std::complex_literals;

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

代码语言:javascript
复制
std::complex<double> z1 = 1i * 1i;

下面是两个失败的例子:

代码语言:javascript
复制
// error: namespace std::literals::complex_literals has no member i
std::literals::complex_literals::i
代码语言:javascript
复制
// error: more than one instance of overloaded function
std::literals::complex_literals::operator""i(3.0) 

如何在不定义自己的iusing namespace的情况下访问常量i

EN

回答 1

Stack Overflow用户

发布于 2021-09-19 18:44:32

你可以这样创建你的单位常量:

代码语言:javascript
复制
constexpr auto imaginary_unit = std::literals::complex_literals::operator""i(1.L);

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

...常量i ...

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

代码语言:javascript
复制
constexpr std::complex<double> operator""i(long double d) {
    return std::complex<double>{0.0, static_cast<double>(d)};
}

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69245917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档