问题标签 [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++11 用户定义的文字是否比普通类型转换慢?
1)在运行时这些中的任何一个都比另一个更快吗?哪个,为什么?
2)这发生在编译时还是运行时?
编辑:使用constexpr有帮助吗?
c++ - C ++中的固定宽度整数文字?
C++11 首次引入了对通过用户定义的文字在 C++ 中定义新文字的支持。C++11 或更高版本是否还为 in 中的类型预定义了固定宽度整数文字的后缀<cstdint>
?
c++ - 将 char[] 转换为模板列表
最近我偶然发现了用户定义的文字,尤其是模板化的可变参数 char 数组类型:
有没有办法用正常的constexpr
功能做到这一点?
像这样的东西:
这将允许多个参数和常规语法。
那么有什么方法可以将模板化的可变参数 char 数组作为普通函数的参数技巧(或某种实现类似效果的方法)?
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[]
?
c++ - 使用用户定义文字的成员时编译错误
编译此代码时(没有任何标题)
编译器(Ubuntu 14.04 上的 g++ 4.8 和 clang++ 3.4)会抱怨
似乎那里_f.temp
被认为是后缀。为什么编译器会这样解析它,而不是停在点上?
c++ - 对字符串使用用户定义的文字而不是字符串文字的优点
SO文档中的字符串主题曾经在备注部分中说:
从 C++14 开始,
"foo"
建议使用 ,而不是使用 ,因为它是"foo"s
字符串s
文字,它将 转换const char *
"foo"
为std::string
"foo"
.
我看到使用的唯一优势
代替
是在第一种情况下,编译器可以执行复制省略(我认为),这比第二种情况下的构造函数调用要快。
尽管如此,这(尚未)得到保证,因此第一个也可能调用构造函数,即复制构造函数。
忽略需要使用std::string
文字的情况,例如
std::string
使用文字而不是文字有什么好处const char[]
吗?
c++ - 有没有办法对字符串用户定义的文字进行编译时检查?
我正在编写一个用户定义的string
文字来将月份的名称转换为它们的数字。该文字的预期用法类似于
应该返回11
。
目前我的代码看起来像
whereconstexpr int convert_month_to_int(const char, size_t)
是一个进行实际转换的函数(-1
如果月份名称不正确,则返回)。
问题是如果传递给这个文字的字符串没有命名任何月份,我想显示某种编译错误。我尝试通过static_assert
以下方式使用:
但这不起作用,因为编译器不确定这convert_month_to_int(str, len)
将是一个常量表达式。
有没有办法实现这种行为?
c++ - 将多字节 ASCII 文字分配给枚举值
可以将 ASCII 文字(不能将其称为字符串)分配给enum
值,如下所示:
0x4141
在这种情况下,编译器会对其进行编译并在编译时生成一个十六进制常量。它确实会生成一个编译警告,如下所示:
我的问题是,我们可以避免这个警告吗?
或者我们可以编写更优雅的代码来实现类似的结果,可能使用模板和 constexpr?
我正在寻找一种可移植的替代方案,这样我就可以在不影响核心逻辑的情况下摆脱它作为重构的一部分。
c++ - 为什么复数文字在 clang 中不起作用?
当我在 ideone.com 上运行此代码时,它会打印(2,3)
:
但是当我在 macOS 10.11.6 上使用 clang 时,我没有收到任何错误或警告,但输出是 (2,0)
:
虚部发生了什么?难道我做错了什么?
c++ - 何时以及如何使用模板文字运算符?
在cppreference上提到可以有模板化的用户文字操作符,但有一些限制:
如果字面量运算符是一个模板,它必须有一个空的参数列表,并且只能有一个模板参数,它必须是一个元素类型的非类型模板参数包
char
,例如
所以我在下面的代码中写了一个:
问题:
- 该代码有效,但是如何将运算符与一些非空模板参数一起使用?
10_x<'a'>;
或10_<'a'>x;
不编译。 - 您是否有任何此类模板化运算符在实际使用中的示例?