相关疑难解决方法(0)

C++ 11 - constexpr函数中的static_assert?

如何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++ static-assert constexpr c++11

53
推荐指数
2
解决办法
1万
查看次数

固定宽度整数类型的整数文字

对于像这样的固定宽度整数类型的整数文字是否有一些 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)

c++ c++11

19
推荐指数
1
解决办法
917
查看次数

int64_t 和类似类型是否有可移植的文字后缀?

我试图理解 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 的文字后缀?

c++ portability c++17

7
推荐指数
1
解决办法
316
查看次数

如何在C++ 11中初始化uint64_t

uint64_t x(1 << 35)给出输出0和警告.初始化这么大的值最合适的是什么?

c++ c++11

3
推荐指数
1
解决办法
2029
查看次数

标签 统计

c++ ×4

c++11 ×3

c++17 ×1

constexpr ×1

portability ×1

static-assert ×1