gpt4 book ai didi

c++ - 我如何在 C++11 中定义负 UDL(它们是否被禁止?)?

转载 作者:可可西里 更新时间:2023-11-01 18:17:30 26 4
gpt4 key购买 nike

我什至不确定是否允许负用户定义文字。如果不是,为什么他们被排除在外?

例如,我想使用:

auto money_i_owe_jack = -52_jpy;

这是我使用 gcc 4.7.2 尝试的结果:

constexpr int64_t operator "" _jpy(long long l)
{
return static_cast<int64_t>(l);
}

错误

Test_udl.cpp:60:47: error: ‘constexpr int64_t operator"" _jpy(long long int)’ has invalid argument list

最佳答案

无论是用户定义的还是其他方式,整数和 float 始终为正数。

原因很简单:如果您允许否定文字,词法分析就会变得依赖于上下文。也就是说,当遇到类似 - 10 的情况时, 词法分析器不能仅仅孤立地查看该文本并知道它应该被视为两个单独的标记( -10 )还是一个( -10 )。如果您始终将其视为单个标记,则类似于 a - 10会导致 <a><-10> (即 <identifier><literal> ,这不是 C++(或大多数其他编程语言)中的合法序列。

为了解决这个问题,解析器可以向词法分析器提供一些上下文,在任何给定时刻告诉它是否期望(例如)一个运算符或一个操作数,所以它会知道如果它是为了产生一个运算符,-应该被视为它自己的标记,但如果需要一个操作数,-10将是单个标记。

虽然有一个始终遵循的规则通常更容易,但有效的规则是 -始终是运算符,文字不能包含 -完全没有。

关于c++ - 我如何在 C++11 中定义负 UDL(它们是否被禁止?)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14972812/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com