小编Nim*_*rod的帖子

为什么 std::rand() 的返回类型不是 unsigned int?

std::rand说,

\n
\n

int rand();
\n返回 \xe2\x80\x8b0\xe2\x80\x8b 和 RAND_MAX 之间的伪随机积分值(包括 \xe2\x80\x8b0\xe2\x80\x8b 和 RAND_MAX)。

\n
\n

既然保证返回非负整数,为什么返回类型是有符号的呢?

\n

我不是在谈论我们是否应该在这里使用它。这是一个历史问题还是一些糟糕的设计?

\n

c++ random

31
推荐指数
2
解决办法
2746
查看次数

结构化绑定中的 cv 限定符传播

正如dcl.struct.bind中引用的那样,

让 cv 表示 decl-specifier-seq 中的 cv 限定符。

将 E 的非静态数据成员指定为 m 0 、 m 1 、 m 2 、...(按声明顺序),每个 vi 是一个左值的名称,该左值引用 e 的成员 mi ,其类型为 cv T i ,其中 T i 是该成员的声明类型;

如果我理解正确,cv 限定符是从结构化绑定的声明中传播的。

假设我有一个简单的结构,

struct Foo {
    int x;
    double y;
};

Run Code Online (Sandbox Code Playgroud)

考虑两种情况,

const Foo f{1, 1.0};
auto& [x, y] = f;
// static_assert(std::is_same<decltype(x), int>::value); // Fails!
static_assert(std::is_same<decltype(x), const int>::value); // Succeeds
Run Code Online (Sandbox Code Playgroud)

现场演示。的 cv-qualifier 是否x来自扣除auto

第二个,

Foo f{1, 1.0};

const auto& [x, …
Run Code Online (Sandbox Code Playgroud)

c++ qualifiers language-lawyer c++17 structured-bindings

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

需要模板的某些特殊化作为模板参数

我有一个数据结构meta_array,它用变体实例化为类型 T 参数。要求是 std::variant 特化必须包含类型,meta_array_head_t因为它用于跟踪信息。我可以使用类型特征(C++17)以某种方式将其声明为要求吗?

编译器资源管理器

#include <cstdio>
#include <variant>
#include <array>

struct meta_array_head_t {
    // end_;
    // remaining_;
    // prev_;
};

template <typename T, size_t S> // make sure T = std::variant<... , meta_array_head_t, ...>
struct meta_array
{
    std::array<T, S> data_; 
};


using val = std::variant<std::monostate, int, double, meta_array_head_t>;

int main()
{
    meta_array<val, 100> marray;
}
Run Code Online (Sandbox Code Playgroud)

c++ templates type-traits template-specialization c++17

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