- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
有一些已知的方法可以操作整数文字的类型
0L; // long
3U; // unsigned integer
1LL; // long long
我需要一种将整数文字初始化为 std::size_t
的方法.我以为这样做了
2U; // unsigned int
就够了,但是在调用需要两个相同整数类型的参数的函数模板时,我仍然会遇到编译器错误(没有匹配的函数来调用 func(unsigned int, size_t
)
我知道/验证了显式转换 (static_cast<std::size_t>(1)
) 第一个参数可以解决问题,但我想问是否有更漂亮的解决方案
编辑
函数有签名
template <class T> const T& func(const T& a, const T& b);
EDIT2
我不知道这个问题是否值得“责备”,但我很高兴地宣布 this is upcoming (感谢@malat 在评论中提到这一点)
最佳答案
没有这样的标准设施。 C99 和 C++11 实现在 <stdint.h>
中确实有这样的宏/<cstdint>
.但即使在那里,宏也只为 stdint.h
定义。类型,不包括 size_t
.
你 could定义一个用户定义的文字操作符:
constexpr std::size_t operator "" _z ( unsigned long long n )
{ return n; }
auto sz = 5_z;
static_assert( std::is_same< decltype( sz ), std::size_t >::value, "" );
constexpr
必须在数组边界中使用它 int arr[ 23_z ]
或 case 9_z:
标签。
大多数人可能会认为缺少宏是一种优势:)。
抛开可爱,最好的方法是使用大括号初始化:std::size_t{ 42 }
.这不等于 std::size_t( 42 )
这就像一个讨厌的 C 转换——大概是你用 static_cast
避免的。 .恰恰相反:大括号要求里面的值在目标类型中是完全可表示的。所以,char{ 300 }
和 std::size_t{ -1 }
都是不正确的。
大括号和括号看起来很相似,但在初始化临时对象时,它们在安全方面是截然相反的。大括号比文字运算符更安全,因为与函数不同,它们可以区分编译时值。
关于c++ - 将整数文字初始化为 std::size_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22346369/
出于好奇,我尝试了一些原型(prototype)制作,但似乎只允许在第一个位置使用子例程的原型(prototype) &。 当我写作时 sub test (&$$) { do_somethin
我需要开发一个类似于 Android Play 商店应用程序或类似 this app 的应用程序.我阅读了很多教程,发现几乎每个教程都有与 this one 类似的例子。 . 我已经开始使用我的应用程
考虑一个表示“事件之间的时间”的列: (5, 40, 3, 6, 0, 9, 0, 4, 5, 18, 2, 4, 3, 2) 我想将这些分组到 30 个桶中,但桶会重置。期望的结果: (0, 1,
我是一名优秀的程序员,十分优秀!