问题标签 [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 投票
2 回答
116 浏览

c++ - C++11 用户定义的文字是否比普通类型转换慢?

1)在运行时这些中的任何一个都比另一个更快吗?哪个,为什么?
2)这发生在编译时还是运行时?

编辑:使用constexpr有帮助吗?

0 投票
1 回答
2562 浏览

c++ - C ++中的固定宽度整数文字?

C++11 首次引入了对通过用户定义的文字在 C++ 中定义新文字的支持。C++11 或更高版本是否还为 in 中的类型预定义了固定宽度整数文字的后缀<cstdint>

0 投票
0 回答
59 浏览

c++ - 将 char[] 转换为模板列表

最近我偶然发现了用户定义的文字,尤其是模板化的可变参数 char 数组类型:

有没有办法用正常的constexpr功能做到这一点?

像这样的东西:

这将允许多个参数和常规语法。

那么有什么方法可以将模板化的可变参数 char 数组作为普通函数的参数技巧(或某种实现类似效果的方法)?

0 投票
0 回答
818 浏览

c++ - C++11 - 来自 char[] 的用户定义字符串运算符重载

阅读有关用户定义的文字,并发现它对从char[].

绝对正确的方法是这样的

但实际上类似的东西的类型"hello"const char (&)[N]N长度在哪里)。所以我想知道是否有这样的替代方法

但是哎呀编译器(Ubuntu 14.04 中的 g++4.8)给了我一个错误

然后我尝试std::size_t从正确的方式()中删除未使用的参数,std::string operator "" _s (const char* m)但得到了错误

char[]那么当主要文字是 a或 a时,是否必须将长度作为参数wchar_t[]

0 投票
1 回答
311 浏览

c++ - 使用用户定义文字的成员时编译错误

编译此代码时(没有任何标题)

编译器(Ubuntu 14.04 上的 g++ 4.8 和 clang++ 3.4)会抱怨

似乎那里_f.temp被认为是后缀。为什么编译器会这样解析它,而不是停在点上?

0 投票
4 回答
4372 浏览

c++ - 对字符串使用用户定义的文字而不是字符串文字的优点

SO文档中的字符串主题曾经在备注部分中说:

从 C++14 开始,"foo"建议使用 ,而不是使用 ,因为它是"foo"s字符串s文字,它将 转换const char * "foo"std::string "foo".

我看到使用的唯一优势

代替

是在第一种情况下,编译器可以执行复制省略(我认为),这比第二种情况下的构造函数调用要快。

尽管如此,这(尚未)得到保证,因此第一个也可能调用构造函数,即复制构造函数。

忽略需要使用std::string文字的情况,例如

std::string使用文字而不是文字有什么好处const char[]吗?

0 投票
2 回答
677 浏览

c++ - 有没有办法对字符串用户定义的文字进行编译时检查?

我正在编写一个用户定义的string文字来将月份的名称转换为它们的数字。该文字的预期用法类似于

应该返回11

目前我的代码看起来像

whereconstexpr int convert_month_to_int(const char, size_t)是一个进行实际转换的函数(-1如果月份名称不正确,则返回)。

问题是如果传递给这个文字的字符串没有命名任何月份,我想显示某种编译错误。我尝试通过static_assert以下方式使用:

但这不起作用,因为编译器不确定这convert_month_to_int(str, len)将是一个常量表达式。

有没有办法实现这种行为?

0 投票
2 回答
359 浏览

c++ - 将多字节 ASCII 文字分配给枚举值

可以将 ASCII 文字(不能将其称为字符串)分配给enum值,如下所示:

0x4141在这种情况下,编译器会对其进行编译并在编译时生成一个十六进制常量。它确实会生成一个编译警告,如下所示:

我的问题是,我们可以避免这个警告吗?

或者我们可以编写更优雅的代码来实现类似的结果,可能使用模板和 constexpr?

我正在寻找一种可移植的替代方案,这样我就可以在不影响核心逻辑的情况下摆脱它作为重构的一部分。

0 投票
1 回答
3080 浏览

c++ - 为什么复数文字在 clang 中不起作用?

当我在 ideone.com 上运行此代码时,它会打印(2,3)

但是当我在 macOS 10.11.6 上使用 clang 时,我没有收到任何错误或警告,但输出是 (2,0)

虚部发生了什么?难道我做错了什么?

0 投票
3 回答
7082 浏览

c++ - 何时以及如何使用模板文字运算符?

cppreference上提到可以有模板化的用户文字操作符,但有一些限制:

如果字面量运算符是一个模板,它必须有一个空的参数列表,并且只能有一个模板参数,它必须是一个元素类型的非类型模板参数包char,例如

所以我在下面的代码中写了一个:

问题:

  1. 该代码有效,但是如何将运算符与一些非空模板参数一起使用?10_x<'a'>;10_<'a'>x;不编译。
  2. 您是否有任何此类模板化运算符在实际使用中的示例?