相关疑难解决方法(0)

为什么C++流使用char而不是unsigned char?

我一直想知道为什么C++标准库已经使用char类型而不是unsigned char类型实例化了basic_ [io]流及其所有变体.char表示(取决于它是否有符号),您可以对get()等操作进行上溢和下溢,这将导致所涉及变量的实现定义值.另一个例子是当你想使用它的put函数输出一个未格式化的字节到ostream .

有任何想法吗?


注意:我仍然不相信.所以如果你知道明确的答案,你仍然可以发布它.

c++ types iostream overflow stream

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

vector <char>对字符串的好处?

这个问题是有关,但不完全一样,这个问题.

除了与可读性相关的问题之外,使用std::vector<char>而不是std::string保存任意二进制数据是否有任何好处?

即,与字符串相比,是否有任何使用向量更容易/更有效/更好的任务?

c++ string stl vector

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

用于库接口的C风格数组vs std :: array

我想编写一个带有提供读取功能的接口的库.C风格的数组容易出错,但允许传递任何大小的缓冲区.C++数组更安全,但强加于大小.

// interface.h

// C-style array
int read (std::uint8_t* buf, size_t len);

// C++ array
int read (std::array<std::uint8_t, 16>& buff)
Run Code Online (Sandbox Code Playgroud)

我怎样才能拥有两全其美?

我在考虑函数模板,但对于库接口来说似乎并不实用.

template <size_t N>
int read (std::array<std::uint8_t, N>& buf);
Run Code Online (Sandbox Code Playgroud)

编辑 std::vector可能是一个很好的候选人,但如果我们考虑char*并且std::array没有动态分配.

编辑我喜欢很多解决方案gsl::span.我坚持使用C++ 14所以没有std::span.我不知道使用第三个库(gsl)是否会成为问题/允许.

编辑我不认为使用char其他类型可能会对答案产生一些影响,所以更清楚的是操作字节.我char改为std::uint8_t

编辑由于C++ 11保证返回std::vector将被移动而不被复制,因此返回std::vector<std::uint8_t>是可以接受的.

std::vector<std::uint8_t> read();
Run Code Online (Sandbox Code Playgroud)

c++ arrays

4
推荐指数
1
解决办法
440
查看次数

标签 统计

c++ ×3

arrays ×1

iostream ×1

overflow ×1

stl ×1

stream ×1

string ×1

types ×1

vector ×1