如何static_assert在一个constexpr函数中正确执行?例如:
constexpr int do_something(int x)
{
static_assert(x > 0, "x must be > 0");
return x + 5;
}
Run Code Online (Sandbox Code Playgroud)
这不是有效的C++ 11代码,因为constexpr函数必须只包含return语句.我不认为该标准有例外,但GCC 4.7不允许我编译这段代码.
对于像这样的固定宽度整数类型的整数文字是否有一些 c++ 建议?
// i's type is unsigned int
auto i = 10u;
// j's type is uint32_t
auto j = 10u32;
Run Code Online (Sandbox Code Playgroud) 我试图理解 std::variant:
#include <cstdint>
#include <variant>
std::variant<int64_t, double> v;
Run Code Online (Sandbox Code Playgroud)
我想分配一个 int64_t 变体:v = 5L;
它在 x86_64 上编译,因为 int64_t 很长。但它不能在 arm 上编译,因为 int64_t 很长。类型推导现在在 int64_t 和 double 之间有两个相等的选择来转换我的数字,所以它拒绝了。使用 variant<int64_t, string> 我什至不会注意到转换,因为只有一个可用并且编译器会接受它。
类似问题:v = 5LL;现在 arm / 32 位很好,但 x86_64 不再适用。
我在两个平台上都进行了编译,但这(有时)是一种类型转换,具有我无法预见的潜在副作用:v = int64_t(5LL);. 如果没有 LL,我什至无法表达 32 位 int 之外的值。
INT64_C 宏似乎是表达这一点的最便携和最安全的方式:v = INT64_C(5);
但这不再适合读写了。
对于可移植的 int64_t 是否有类似 L/LL 的文字后缀?