问题标签 [user-defined-literals]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1161 浏览

c++ - 单位的 C++ 可用“文字后缀代码”

C++1x 支持文字后缀(cmp。例如http://ecn.channel9.msdn.com/events/GoingNative12/GN12Cpp11Style.pdf)。我正在使用 gcc 4.7 并想为我们的系统介绍一些单元。最值得注意的是,我们一半的代码使用度数,另一半使用弧度(由于各种 3rd 方库),显然这总是导致错误的原因。能够说例如“弧度角= 90_deg;” 会很有帮助的。

我已经研究了如何实现这一点,它看起来是可行的,但是需要一些时间才能使一切正确。所以我想知道是否有一个已经完成/测试过的实现已经实现了所有可以使用的东西(不需要每个 C++ 开发人员重新实现它,是吗?)。除了弧度/度,我还在寻找长度测量值(毫米、厘米、米)。我已经用谷歌搜索了,但没有找到任何可用的东西。

有人知道例如可以使用的 SI 系统的实现吗?

0 投票
1 回答
130 浏览

c++ - 整数值是否应该传递给浮点用户定义的文字?

我正在玩用户定义的文字(使用 GCC 4.7)。

将浮点文字(例如42.0_lb)传递给它时效果很好,但是当我尝试传递整数文字(例如42_lb)时,我收到以下错误:

错误:无法找到数字文字运算符'operator"" _lb'

我的定义不应该_lb导致参数之间的隐式转换long double(就像使用常规函数一样)?

0 投票
2 回答
2639 浏览

c++ - 空析构函数与文字析构函数

考虑以下代码:

如果我删除HERE代码编译良好的行,但如果我定义一个空的析构函数,它会导致编译错误,说它Test是非文字的。

为什么空析构函数和根本没有析构函数之间有什么区别?

编辑:另一个相关问题:如果空和文字析构函数不同,如何定义受保护的文字析构函数?

0 投票
2 回答
19384 浏览

c++ - 数字文字运算符错误

为什么这段代码:

产生其中 5 个错误:

错误:无法找到数字文字运算符 'operator"" _deg'

我正在使用 GCC 4.7.3。( arm-none-eabi-g++, 带有-std=c++0x标志)。

0 投票
0 回答
318 浏览

c++ - 二进制字面量类型转换

我写了以下代码:

如我所愿,这段代码将允许我创建一些(所谓的)“操作码”序列。但是数字文字 as0b00000000被视为 int。这导致了这样一个事实,即最终将较大的有符号整数类型转换为较小的无符号整数类型。它可能会产生不良的副作用。在C++中没有后缀来表示大小为一字节的无符号整数类型。如何使用纯C++11避免这种情况?我不想使用static_cast其他的,因为这会导致代码膨胀(多个括号和至少一个符号来命名static_cast-wrapper 函数)。解决方案可能是使用用户定义的文字,例如0b00000000_op,看起来比o(0b00000000). 但 operator 必须是一个函数模板,如:

但是在C++11中没有这样的语法......T如果有模板参数怎么办?

0 投票
2 回答
1521 浏览

c++ - 如何在 c++11 中定义负 UDL(它们是否被禁止?)?

我什至不确定是否允许使用负用户定义文字。如果不是,为什么他们被排除在外?

例如,我想使用:

这是我尝试使用 gcc 4.7.2 的方法:

错误

0 投票
2 回答
301 浏览

c++ - 如何基于单个用户定义的文字自动添加文字定义?

C++11提供用户定义的文字。我刚刚开始玩弄它们,这让我想知道是否可以将所有SI 乘数自动添加到我定义的单个文字中?

例如,如果我定义

whereLength是某个Units基类的子类,我希望有一种机制可以为所有返回 a 的文字自动添加(本着与boost 运算符Length相同的精神)SI 乘数:

据我所知,除了一些宏魔法之外,没有办法自动执行此操作,因为所有用户定义的文字都需要显式定义。

..还是我忽略了什么?

0 投票
2 回答
1802 浏览

c++ - 是否可以禁用关于用户定义文字中缺少下划线的 GCC 警告?

在 GCC 4.7 中,这会生成“警告:不以 '_' 开头的文字运算符后缀保留用于将来的标准化 [默认启用]”

我理解为什么会生成此警告,但 GCC 说“默认启用”。

是否可以在不通过 -w 标志禁用所有警告的情况下禁用此警告?

0 投票
2 回答
232 浏览

c++ - 类型推导的重载赋值运算符

这是 ideone 代码:http: //ideone.com/Qp8Eqg

我的问题是,是否可以仅基于左值强制转换?例如,

显然,我必须编写类似 2_h.toSeconds() 的东西,但这太冗长并且无法实现这个想法。

0 投票
19 回答
87065 浏览

c++ - 在 C++ 中方便地声明编译时字符串

能够在 C++ 编译期间创建和操作字符串有几个有用的应用程序。虽然可以在 C++ 中创建编译时字符串,但这个过程非常繁琐,因为字符串需要声明为可变的字符序列,例如

字符串连接、子字符串提取等操作可以很容易地实现为对字符序列的操作。是否可以更方便地声明编译时字符串?如果没有,是否有一项提案可以方便地声明编译时字符串?

为什么现有方法会失败

理想情况下,我们希望能够如下声明编译时字符串:

或者,使用用户定义的文字,

wheredecltype(str2)会有一个constexpr构造函数。利用您可以执行以下操作的事实,可以实现方法 1 的更混乱版本:

但是,数组需要有外部链接,所以要让方法 1 起作用,我们必须编写如下内容:

不用说,这很不方便。方法2实际上是不可能实现的。如果我们要声明一个 ( constexpr) 文字运算符,那么我们将如何指定返回类型?由于我们需要操作符返回一个可变的字符序列,所以我们需要使用const char*参数来指定返回类型:

这会导致编译错误,因为s不是constexpr. 尝试通过执行以下操作来解决此问题并没有多大帮助。

该标准规定,这种特定的文字运算符形式是为整数和浮点类型保留的。虽然123_s会工作,abc_s但不会。如果我们完全放弃用户定义的文字,而只使用常规constexpr函数怎么办?

和以前一样,我们遇到的问题是数组,现在是constexpr函数的参数,它本身不再是constexpr类型。

我相信应该可以定义一个 C 预处理器宏,它接受一个字符串和字符串的大小作为参数,并返回一个由字符串中的字符组成的序列(使用BOOST_PP_FOR、字符串化、数组下标等)。但是,我没有时间(或足够的兴趣)来实现这样的宏 =)