d的8进制
auto w = 01777777777777777777777;
这样报错,用这:
auto w = std.conv.octal!1777777777777777777777;
说,整溢出
.
这样会工作:
auto w = std.conv.octal!"1777777777777777777777";
这样也可以:
auto w = octal!"1777777777777777777777UL";
我的问题,与实现:
template octal(alias decimalInteger)
if (is(typeof(decimalInteger)) && isIntegral!(typeof(decimalInteger)))
{
enum octal = octal!(typeof(decimalInteger))(to!string(decimalInteger));
}
有关.
无法想象为了覆盖decimalInteger>ulong.max
的增强.还有命名问题:根据参数
表示(十进制)还是函数
(八进制)来命名参数
?更好名字可能是octalLiteralDisguisedAsDecimalLiteral
.
octal!<literal>
和octal!"<literal>"
看作可互换.
C风格的八进制
认为太容易与十进制
混淆;仅在串字面中支持.D
仍然支持编译时通过std.conv.octal
模板解释的八进制整数
文面,如octal!167
.未提及限制.
octal!123
是模板,因此必须是有效
D代码.你的整数
不是有效的D代码
,因此无法编译
.有效整数则可编译.
只要结果数字
合适,串版本
就可保证工作,这是编译器
应建议它的原因.但是不必取消支持常规整数
.
也应更新
规范文档.
天哪,非串版本
实现很糟糕,CTFE
不应这样.
我的观点是它不会为某些有效
八进制字面编译.
我还没看过C标头
包含的东西.它如何处理八进制字面
?
它们实际上不是八进制字面
.
实现
是太复杂,讽刺的是,由于代码审查
挑剔类型
,但概念
不是:它假装是八进制字面
.这是方便方法,预计不适用于所有可能值,因而有串版
.
八进制字面
实际上在D解析器
中处理得很好.甚至可从中得到有效的数字
.语法仍完好无损
.
但是编译器
只是用该解析值
来显示错误消息
.
我希望ImportC
使用相同代码,只是不显示错误
.
assert(octal!0b1111001 == octal!0x79);
//编译,但没用.
另一个问题:
auto x1 = octal!17777777777;
auto x2 = octal!"17777777777";
pragma(msg, typeof(x1)); // long
pragma(msg, typeof(x2)); // int
你也可以:
int x1 = octal!17777777777;
但是auto
很方便,模板IFTI
不会继承赋值给int
等的能力.
我们只是不记录
(但不弃用
)数字版
.一旦编译器
建议停止使用,就不要用了.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现