问题标签 [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 回答
168 浏览

c++ - 用户定义文字到 MPL 序列:这合法吗?

能够将传递给文字运算符的字符串转换为 MPL 序列将很有用,因为我们将能够根据字符串的内容控制代码生成。以前,我认为这是不可能的,因为 constexpr 函数的参数不被视为函数体内的常量表达式。但是,我想出了在 Clang 3.4.2 和 GCC 4.8.2 下编译的以下解决方法:

输出:

问题

此代码是否调用未定义的行为,还是合法的?

0 投票
1 回答
88 浏览

c++11 - 是否可以使用用户定义的文字来实现 SI 系统的派生单位?

我想重载用户定义的文字,以便它允许执行一些物理计算,例如

如何实现?

0 投票
2 回答
1090 浏览

c++ - 使用用户定义的文字实现 km/h 和 m/s

我想实现两个用户定义的文字,_kmh 表示每小时公里数,_ms 表示每秒米数。我已经有两个结构和运算符 "" 函数:

我希望它以我可以执行以下操作的方式实现它:

我不能让第二个电话工作,因为我不能像这样实现它:

这显然给了我错误

错误:仅返回类型不同的函数不能重载

有没有办法实现我想要的?

0 投票
3 回答
3678 浏览

c++ - 为什么默认情况下全局命名空间中没有 C++14 标准定义的文字?

C++14 包括标准定义的文字,其中包括标题中std::string的各种时间跨度。<chrono>

要使用它们,您必须说using namespace std::literals;(或一些变化,具体取决于您想要的文字,因为它们位于各种内联名称空间中)。

这一切都很好,但我很好奇为什么using需要声明。没有前导下划线的 UDL 被保留用于实现,因此"hello world"s在符合标准的程序中不可能有任何其他含义。

那么为什么#include <string>将文字转换功能引入范围还不够呢?为什么我必须明确包含文字命名空间?

编辑: N3531是我能找到的最新版本的提案——不幸的是,它没有讨论将事物放入命名空间的动机,而只是说:

可以将[波特兰]讨论的要求总结如下:

  • 为(一组相关的)UDL 运算符使用内联命名空间
0 投票
2 回答
207 浏览

c++ - 如何定义自定义文字?

我正在将一些源代码从一种脚本语言 (PAWN) 转换为 Windows 上的一种编程语言 (C++)。

源代码到处都有数以百万计的二进制文字,形式如下:

不幸的是,Visual Studio 2013 不支持用户定义的文字标准。

有没有办法以某种方式实现这一目标?010101_b 或 C++ 之类的东西,也许还有一点提升?

0 投票
1 回答
103 浏览

c++ - 以下包扩展有什么问题?

编译器说

第 12 行对“b3_helper”的调用不明确”;

我该如何解决?我在学习 C++ 编程语言 4th 时发现了这个问题。在第 560 页

0 投票
0 回答
93 浏览

c++ - 是否有理由将运算符 ""s 放入 std::literals::string_literals?

我很惊讶地发现这段代码无法编译(假设我们使用的是 C++14 编译器):

ideone显示的错误如下

无法找到字符串文字运算符'operator""s'

幸运的是,很容易用一个using语句来修复:

我想知道将标准字符串用户定义的文字放置在与其std::string本身不同的命名空间中是否有原因;我一直在想它,我想不出原因。

不可能与operator""sfrom发生冲突,std::chrono因为它们使用不同的类型:

我在想原因可能是不与我的用户定义的文字发生冲突,但标准说必须在它们之前加上'_'下划线

警告:不以“_”开头的文字运算符后缀保留用于将来的标准化

所以,我很惊讶,任何人都知道将字符串文字运算符放入std::literals::string_literals?

谢谢。

0 投票
1 回答
661 浏览

c++ - typeid(复杂(0.0,1.0)) != typeid(1.0i)

使用gcc 4.9我发现使用类型文字为复数生成的类型与通过常规方式创建的类型不同,即:

  1. 我在这里犯错了吗?
  2. 这是编译器错误还是预期的标准行为?
  3. 如果预期的标准行为:背后的理由是什么?

添加缺少的 MCVE

编译说明:

输出:

有趣的是,文字甚至似乎都不是一个适当的虚数。(我确定我忽略了一些东西......)

0 投票
1 回答
206 浏览

c++ - Visual Studio 2013 用户定义文字 - 最新 CTP

Microsoft 正在预览 Visual Studio 2013 的新 CTP。单击此处。如何检查它是否支持 C++11 用户定义文字?

我知道 VS 2013 的早期版本,包括 11 月 CTP 不支持 UDL,而 VS 2015 将支持 UDL。

如果不在此 CTP 中,VS 是否有可能支持 UDL?

0 投票
1 回答
5014 浏览

c++ - 不带下划线的用户定义文字

根据cppreference可以定义一个文字使用

现在阅读该段后,我认为应该也可以定义

(注意rud-suffix 而不是s

重载s只会发出铿锵警告

我在编译时无法真正理解-std=c++14。重载r

这对我来说似乎更不负责任。

为什么 clang 会发出这些警告/错误以及如何使rud-suffix 有效。