问题标签 [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.
c++ - 单位的 C++ 可用“文字后缀代码”
C++1x 支持文字后缀(cmp。例如http://ecn.channel9.msdn.com/events/GoingNative12/GN12Cpp11Style.pdf)。我正在使用 gcc 4.7 并想为我们的系统介绍一些单元。最值得注意的是,我们一半的代码使用度数,另一半使用弧度(由于各种 3rd 方库),显然这总是导致错误的原因。能够说例如“弧度角= 90_deg;” 会很有帮助的。
我已经研究了如何实现这一点,它看起来是可行的,但是需要一些时间才能使一切正确。所以我想知道是否有一个已经完成/测试过的实现已经实现了所有可以使用的东西(不需要每个 C++ 开发人员重新实现它,是吗?)。除了弧度/度,我还在寻找长度测量值(毫米、厘米、米)。我已经用谷歌搜索了,但没有找到任何可用的东西。
有人知道例如可以使用的 SI 系统的实现吗?
c++ - 整数值是否应该传递给浮点用户定义的文字?
我正在玩用户定义的文字(使用 GCC 4.7)。
将浮点文字(例如42.0_lb
)传递给它时效果很好,但是当我尝试传递整数文字(例如42_lb
)时,我收到以下错误:
错误:无法找到数字文字运算符'operator"" _lb'
我的定义不应该_lb
导致参数之间的隐式转换long double
(就像使用常规函数一样)?
c++ - 空析构函数与文字析构函数
考虑以下代码:
如果我删除HERE
代码编译良好的行,但如果我定义一个空的析构函数,它会导致编译错误,说它Test
是非文字的。
为什么空析构函数和根本没有析构函数之间有什么区别?
编辑:另一个相关问题:如果空和文字析构函数不同,如何定义受保护的文字析构函数?
c++ - 数字文字运算符错误
为什么这段代码:
产生其中 5 个错误:
错误:无法找到数字文字运算符 'operator"" _deg'
我正在使用 GCC 4.7.3。( arm-none-eabi-g++
, 带有-std=c++0x
标志)。
c++ - 二进制字面量类型转换
我写了以下代码:
如我所愿,这段代码将允许我创建一些(所谓的)“操作码”序列。但是数字文字 as0b00000000
被视为 int。这导致了这样一个事实,即最终将较大的有符号整数类型转换为较小的无符号整数类型。它可能会产生不良的副作用。在C++中没有后缀来表示大小为一字节的无符号整数类型。如何使用纯C++11避免这种情况?我不想使用static_cast
其他的,因为这会导致代码膨胀(多个括号和至少一个符号来命名static_cast
-wrapper 函数)。解决方案可能是使用用户定义的文字,例如0b00000000_op
,看起来比o(0b00000000)
. 但 operator 必须是一个函数模板,如:
但是在C++11中没有这样的语法......T
如果有模板参数怎么办?
c++ - 如何在 c++11 中定义负 UDL(它们是否被禁止?)?
我什至不确定是否允许使用负用户定义文字。如果不是,为什么他们被排除在外?
例如,我想使用:
这是我尝试使用 gcc 4.7.2 的方法:
错误
c++ - 是否可以禁用关于用户定义文字中缺少下划线的 GCC 警告?
在 GCC 4.7 中,这会生成“警告:不以 '_' 开头的文字运算符后缀保留用于将来的标准化 [默认启用]”
我理解为什么会生成此警告,但 GCC 说“默认启用”。
是否可以在不通过 -w 标志禁用所有警告的情况下禁用此警告?
c++ - 类型推导的重载赋值运算符
这是 ideone 代码:http: //ideone.com/Qp8Eqg
我的问题是,是否可以仅基于左值强制转换?例如,
显然,我必须编写类似 2_h.toSeconds() 的东西,但这太冗长并且无法实现这个想法。
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
、字符串化、数组下标等)。但是,我没有时间(或足够的兴趣)来实现这样的宏 =)