用户定义的文字与UINT64_T参数相结合
user-defined literals combined with an uint64_t argument
我只是偶然发现了以下用户定义的文字:
#include <cstdint>
constexpr auto operator""_G(uint64_t v) { return v * 1'000'000'000ULL; }
但是,这不会使用GNU 7.3.0和-std=c++14
编译。我得到一个"有无效的参数列表"错误。
根据https://en.cppreference.com/w/cpp/language/user_literal,唯一允许的未签名的64位类型是unsigned long long int
。但是,来自stdint.h
的uint64_t
Typedef映射到GCC内置定义__UINT64_TYPE__
。
#define __UINT64_TYPE__ long unsigned int;
通过运行gcc -dM -E an_empty_file.c | grep "__UINT64_TYPE__"
当然,用unsigned long long int
替换uint64_t
会避免编译错误。但是这两种类型在LP64数据模型上是相同的。
默认情况下不应该工作吗?
默认情况下不应该工作吗?
nope。该标准要求用户定义的字面类型为 unsigned long long int
[1] 。long unsigned int
不是同一回事,它是其自己独特的类型。即使它们具有完全相同的属性,std::is_same_v<unsigned long long int, long unsigned int>
是错误的。
如果要使用字面的整数编号,则必须使用unsigned long long int
的类型。
相关文章:
- C++ 将函数指针与最佳性能相结合
- 将2个欧拉角与GLM相结合的问题
- 抽象和派生与std::list相结合
- 想要将 CGAL 与四元数相结合是否合乎逻辑
- 可变参数模板与默认模板参数相结合
- 是否可以将C++与任何语言相结合?
- 如何将Back_inserter与转换组合C 相结合
- 如何在C++中创建将函数与参数相关联的 Map?
- C 操纵器,可以将SetPrecision Manip与SetFill Manip相结合
- 如何将Boost.Spirit自定义点与Nabialek相结合?
- 将可选与reference_wrapper相结合是否有意义?
- 好的设计?用于分配的智能指针与用于访问的原始指针相结合
- 用户定义的文字与UINT64_T参数相结合
- 前向迭代器与多个绑定相结合的迭代速度太快
- 有问题使循环工作与功能相结合
- 如何在C++中将惰性计算与自动计算相结合
- 在Visual Studio中将调试与C .lib的发行版相结合
- 将声明和初始化与超载`=`相结合
- C++中的通用(几乎)自描述参数与 GUI 相结合
- 各种符号(*,&等)与参数相结合之间有什么区别?