问题标签 [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++11 - How do I require a type go through a user defined literal?
I have a POD-type Foo
that I want to require users instantiate through my user defined literal (default copying, moving, and assignment are OK):
As an example, I want something like this:
However with the above code I get the following compilation error (Xcode 4.6.3/Clang):
How do I reopen the {}-ctor for business, but only for my user defined literal?
c++ - 两参数构造函数的用户定义文字
请考虑以下代码:
UDL 有效,但是否可以使其对 Point 的构造函数的两个参数都有效?eg3x5
是一个字面量,Point(3,5)
或者甚至是一个字面量3.5x
,然后在操作符主体中做一些数学运算以将整个部分与浮点数的小数部分分开..?
c++ - 为什么 std::string 没有标准定义的文字后缀?
一个简单的问题:为什么 C++11 不提供一个“用户”(实际上是标准库)定义的文字来创建一个std::string
,例如
与 C++ 一样,Objective-C 支持 C 风格的字符串和更用户友好的库类型NSString
;然而,与 C++ 不同的是,没有人会混淆这两者,因为NSString
通过在字符串文字前加上@
. 事实上,很少看到没有@
前缀的Objective-C 代码。每个人都知道这是这样做的方法,使用NSString
并继续使用它。
C++11 用户定义的文字允许这样做,事实上,Stroustrup 的 C++11 FAQ 上的 UDL 部分正是使用了这个示例。此外,没有前导下划线的 UDL 是保留的,因此允许s
上面的纯文本没有问题——它不可能与其他任何内容发生冲突。
也许我遗漏了一些东西,但这似乎是对该语言非常有价值且无风险的补充,所以有人知道为什么 C++11 不提供它吗?它有可能出现在 C++14 中吗?
c++ - 使用 Microsoft Visual Studio 2013 的 C++ 11 用户定义文字
据我所知,MVS 2013 包含并支持 UDL。
我试图做一些事情,例如:
上面两行都在“”处给出错误,说它需要一个操作员。我的猜测是项目设置有问题,因为代码应该可以工作并且 MVS13 支持 UDL。
可能是什么问题,我该如何解决?
c++ - 如何在模板类中声明朋友用户定义的文字运算符?
不清楚为什么下面的代码不能用 GCC g++ 4.7 编译,告诉以下内容:
如果类 C 被声明为非模板,那么它编译得很好。
这段代码有什么问题?或者它是一个编译器错误?
c++ - 无法定义用户定义的文字
我正在阅读用户定义的文字,我遇到了这个片段,但是当我尝试使用它时出现编译器错误。
它说错误:需要一个操作员。我在 Visual STudio 2013 上,我相信它对 C++ 11 有很好的支持。有什么想法吗?
c++ - 具有依赖类型的字符串字面量——不可能?
是否可以定义用户定义的字符串文字转换运算符,使其结果的类型取决于其字符串输入的值?
使用用户定义的整数和浮点文字很容易,因为它们允许文字运算符模板,并且文字的实际字符作为模板参数传递给它。例子:
用户定义的字符串文字似乎不存在这样的事情。
是否有另一种方法可以做到这一点,无论是在当前标准中还是计划/讨论的未来修订中?
c++ - 自定义文字适用于 long double 但不是 double,并且可以通过值传递但不能通过引用传递
我正在尝试使用 C++ 自定义文字。当我将类型从long double
type 更改为double
或尝试通过引用传递时,我发现下面的简单函数停止工作很奇怪。
起初我认为它与使用有关,constexpr
但情况似乎并非如此,因为如果它不在 an 上,这两个都可以正常工作operator ""
,并且constexpr
从 theoperator ""
中删除并不会消除错误。
这些是语言设计中经过深思熟虑的决定,还是我的编译器(gcc 4.8.2)无法处理的细微差别?
c++ - __int128 @ min 负值的 UDL(用户定义文字)整数溢出
为了清楚和简单起见,我将以下数字缩短如下:
−170,141,183,460,469,231,731,687,303,715,884,105,728
作为-170…728
170,141,183,460,469,231,731,687,303,715,884,105,727
作为170…727
gcc
这些数字表示 128 位有符号整数 (__int128 in )的最小值和最大值。
我为这种数据类型实现了用户定义的文字(原始文字),因为 gcc 不提供定义这种类型的常量的方法:_u128
forunsigned __int128
和_i128
for __int128
。
减号不是 UDL 的一部分,而是应用于 UDL 结果的一元减号运算符。
因此,对于 a -ddddd_i128
(其中d
是数字),UDL 计算带有正值的带符号 的 a ,然后编译器将对其应用一元减号运算符。到目前为止,一切都很好。__int128
ddddd
问题在于-170…128_i128
(应该是 的有效值__int128
):
UDL 计算的有符号 __int128
正数170…128
刚好在 的范围之外__int128
,导致未定义行为(有符号整数溢出)。
有什么解决方案可以用 UDL 表示这个数字常数吗?
我的 UDL 被声明(现在只是一个非常量的、循环的版本)(它们是原始文字):
一些用法:
我知道有多种方法可以定义常量-170…728
,例如位移、数学运算,但我希望能够以一致的方式创建它,例如我不想要这种情况:您可以使用创建任何常量这个 UDL,除了-170…728_i128
,你必须使用额外的技巧。
c++ - 用户定义文字的范围是什么?
考虑这两个:
x
字面量定义了两次,但其中一个定义在 中,namespace X1
另一个定义在 中namespace X2
。
根据C++标准,这段代码可以编译吗?