\n\n\n
int rand();
\n返回 \xe2\x80\x8b0\xe2\x80\x8b 和 RAND_MAX 之间的伪随机积分值(包括 \xe2\x80\x8b0\xe2\x80\x8b 和 RAND_MAX)。
既然保证返回非负整数,为什么返回类型是有符号的呢?
\n我不是在谈论我们是否应该在这里使用它。这是一个历史问题还是一些糟糕的设计?
\n正如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) 我有一个数据结构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)