问题标签 [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++ 用户定义的文字运算符传递空指针吗?
这确实发生在 g++ 的实验版本(gcc 版本 4.7.0 20111114 (experimental) [trunk revision 181364] (Debian 20111114-1))中,但我不确定这是一个错误(90% 肯定)还是一些奇怪的预期行为。
示例程序:
输出(可能是 gcc 中的一个错误......但也许不是?!,因此问题):
这不仅仅是“0_example”;每当文字值为零时。例如,即使文字是“0x0000_example”,它仍然会发生。
这是一个错误吗?或者当文字的值为零时一些奇怪的特殊情况?
c++ - 有没有人有关于使用运营商“”的信息?
Bjarne Stroustrup 今天为 Going Native 2012 会议做了主题演讲。在他的演讲中,他讨论了执行正确单位的问题。他对此的优雅(恕我直言)解决方案涉及使用我以前从未听说过的运算符:operator""
. 使用此运算符,他能够编写如下所示的 C++ 代码:
在哪里operator""m(...)
和operator""s(...)
被定义。
有谁知道有关如何实际使用此运算符的任何文档(或者即使任何现代 C++ 编译器都支持它)?我尝试在网上搜索,但没有运气。任何帮助将不胜感激。
c++ - Physical Boost.Units 用户定义文字
现在我们很快就有了用户定义的文字(UDL),例如在 GCC 4.7 中,我急切地等待(物理)单元库(例如Boost.Units )使用它们来简化文字的表达,例如1+3i
,或. 有没有人使用支持这种行为的 UDL为Boost.Units编写了扩展?3m
3meter
13_meter
javascript - 在 Extjs 中动态扩展类
我需要动态扩展类并使用以下代码:
但它给了我一个错误:
我试图把它改成这个
但错误是
问题在于动态文字。当我这样做时,它工作正常
我该如何解决?我究竟做错了什么?
提前谢谢。
c++ - 为什么 std::string 不定义乘法或文字?
在我第一次接触的语言中,有一个函数repeat()
,它接受一个字符串,并重复它n
多次。例如,repeat ("hi", 3)
给出 的结果"hihihi"
。
我确实有很多次使用这个函数,但令我沮丧的是,我从未在 C++ 中找到类似的东西。是的,我可以很容易地自己制作,或者让它更易于使用,但我有点惊讶它还没有包含在内。
它非常适合的一个地方是std::string
:
这将允许以下语法:
现在它本身还不是很好,但它可能会更好,这让我想到了我的另一部分:文字。
每当我们使用字符串运算符时,例如operator+
,我们必须确保一个参数实际上是一个字符串。他们为什么不直接为它定义一个文字,比如""s
?不以下划线开头的文字后缀是为实现保留的,所以这不应该冲突,因为在任何人真正开始制作自己的之前如何添加它。
回到重复的例子,语法就是:
这将产生:
同时,也可以包括一个字符,以满足cout << '1's + '2's;
为什么不包括这两个功能?它们肯定有明确的含义,并且使编码更容易,同时仍然使用标准库。
c++ - 可以强类型化基于字符串的用户定义文字吗?
C++ 中新的用户定义文字概念暗示了字符串文字的一些非常有趣的用途,例如:
但是,当我在 gcc 中构建这些类型的结构时,例如:
我收到以下错误:
通过阅读,我猜测从字符串文字派生的 UDL 无法使用可变参数模板形式。
- 实际上是不是使用可变参数模板形式无法解析字符串文字?
- 如果是这样,有没有人知道为什么这种有用的 UDL 形式被排除在标准之外?
c++ - char 类型的编译时间一致哈希
我想以Symbol
与 ruby 相同的方式实现。
为此,我创建了一个用户定义的文字,它返回对应std::hash
的a std::basic_string<T>
。
代码很棒,但是当我在某处读到时,哈希函数在同一程序的多次执行中可能不一致。此外,我想在编译时进行此计算,这是 1) 不支持std::hash
和 2) 如果std::hash
返回值更改会破坏代码。
所以我写了下面的实现,基于java.lang.String.hashCode实现。
我的问题是:这个实现有什么问题吗?
我只能在 GCC 4.7.1 上对其进行测试,我想知道它是否符合标准并且也应该在其他编译器上工作。
我问这个是因为以前的实现是在 GCC 上工作的,但是如果二进制文件是用 clang++ 编译的,则会导致段错误(我认为增量运算符的未定义行为问题)。
提前致谢
编辑
使用 clang++(感谢 KennyTM)
c++ - g++ 4.7 将运算符 "" 评估为宏扩展的兄弟
我正在将一些代码移至 GCC 4.7(从 4.6 开始)并遇到一些编译器错误并发现GCC 4.7 移植指南中记录的问题:
用户定义的文字和空格
ISO C11 模式下的 C++ 编译器
std={c++11,c++0x,gnu++11,gnu++0x}
支持用户定义的文字,这与一些有效的 ISO C++03 代码不兼容。特别是,现在在字符串文字之后和可能是有效的用户定义文字之前需要空格。获取有效的 ISO C++03 代码
在 C++03 中,TIME宏扩展为一些字符串文字并与另一个连接。在 C++11
__TIME__
中没有扩展,而是operator "" __TIME__
被查找,导致以下诊断:这适用于任何字符串文字,后面跟着一些宏而没有空格。要修复,只需在字符串文字和宏名称之间添加一些空格。
虽然我可以修复错误,但我想知道为什么我必须这样做。__TIME__
是一个宏,所以"something"__TIME__
会在预处理阶段变成"something""15:52:03"
(或类似的),所以编译器永远没有机会看到它operator ""
。
这种行为标准是批准的还是一个错误?
c++ - 在哪里可以找到 C++11 类型前缀/后缀的列表?
有人可以指出语言类型前缀/后缀的完整列表吗?
前缀示例:
后缀示例:
我所有的搜索尝试都让我去“制作你自己的用户定义的文字”。
也许这些实例有一个我不知道的特定名称?
c++ - 用户定义的字符串文字与。其他用户定义的文字
让我们考虑以下来自 C++11 标准(准确地说是 N3376 草案)的引用:
(2.14.8.5)
如果 L 是用户定义的字符串文字,则令 str 为不带 ud-suffix 的文字,令 len 为 str 中的代码单元数(即,其长度不包括终止空字符)。文字 L 被视为形式的调用
而对于所有其他类型的用户定义文字(浮点、整数、字符),即使文字本身作为字符串传递,长度也永远不会传递。例如:
为什么字符串和非字符串用户定义文字之间存在这种区别?或者我应该说,为什么实现为 UD 字符串文字传递 len?与其他文字的情况一样,长度可以通过空终止来推断。我错过了什么?