相关疑难解决方法(0)

标准委员会关心的异域架构

我知道C和C++标准留下了语言实现的许多方面 - 仅仅因为如果存在具有其他特征的体系结构,那么为它编写符合标准的编译器是非常困难或不可能的.

我知道40年前任何电脑都有自己独特的规格.但是,我不知道今天使用的任何架构:

  • CHAR_BIT != 8
  • signed 不是两个补充(我听说Java有这个问题).
  • 浮点不符合IEEE 754(编辑:我的意思是"不是IEEE 754二进制编码").

我问的原因是我经常向人们解释C++不强制要求任何其他低级方面如固定大小的类型.这很好,因为与其他语言不同,它使你的代码在正确使用时可以移植(编辑:因为它可以移植到更多架构而不需要模拟机器的低级方面,例如符号+幅度架构上的二进制补码算法) .但我感到很难过,我自己也无法指出任何特定的架构.

所以问题是:哪些架构具有上述属性?

uint*_ts是可选的.

c c++ architecture

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

为什么std :: count(_if)返回iterator :: difference_type而不是size_t?

可能重复:
为什么C++标准算法"count"会返回ptrdiff_t而不是size_t?

标准C++中有算法std::count/ std::count_if.

template<class InputIterator, class T>
typename iterator_traits<InputIterator>::difference_type
count(InputIterator first, InputIterator last, const T& value);

template<class InputIterator, class Predicate>
typename iterator_traits<InputIterator>::difference_type
count_if(InputIterator first, InputIterator last, Predicate pred);
Run Code Online (Sandbox Code Playgroud)

效果:返回以下相应条件所适用的[first,last]范围内的迭代器数量:*i == value,pred(*i)!= false.

difference_typeiterator's difference_type,可以是负数,但count只能返回值> = 0.为什么difference_type而不是size_t例如?

c++ library-design stl-algorithm c++11

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

为什么std :: count_if返回有符号值而不是unsigned?

刚刚意识到std::count_if 返回一个有符号的值.

为什么这样设计?在我看来,这两者都没有意义(结果只能是一个自然数,即非负整数),因为它不允许做一些简单的事情,比如将这个结果与容器进行比较size()而不会得到警告或使用显式类型转换.

我真的认为返回类型应该有size_type.

我错过了什么吗?

c++ stl standard-library stl-algorithm

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

为什么在std :: array size_t和std :: vector中的size_type通常是size_t?

该文档说,size_typestd::vector是/ usually / size_t,这是合理的,因为实现可以选择使用不同的东西。

但是为什么size_type = size_tstd::array。特别是在这里,因为std::array使用很少µC,所以最好使实现具有一定的自由度。

这是文档缺陷吗?

c++ size-t stdvector stdarray

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

为什么std :: count返回有符号整数?

我真的很惊讶地看到它std::count返回了一个iterator_traits<InputIterator>::difference_type,这反过来指的long int是我的平台上的一个.

这是为什么?容器中的负计数元素没有任何意义.

c++ containers types c++-standard-library

5
推荐指数
1
解决办法
585
查看次数