相关疑难解决方法(0)

std :: wstring VS std :: string

我无法理解之间的差异std::stringstd::wstring.我知道wstring支持Unicode字符等宽字符.我有以下问题:

  1. 我什么时候应该std::wstring用完std::string
  2. 可以std::string保存整个ASCII字符集,包括特殊字符吗?
  3. std::wstring由所有流行的C++编译器的支持?
  4. 什么是" 广角 "?

c++ string unicode c++-faq wstring

716
推荐指数
7
解决办法
29万
查看次数

`long`保证至少为32位?

通过阅读C++标准,我一直都知道C++中的整数基本类型的大小如下:

sizeof(char) <= sizeof(short int) <= sizeof(int) <= sizeof(long int)
Run Code Online (Sandbox Code Playgroud)

我从3.9.1/2中推断出这个:

  1. 有四种带符号的整数类型:"signed char","short int","int"和"long int".在此列表中,每种类型至少提供与列表中前面的存储一样多的存储空间.简单的int具有执行环境的体系结构所建议的自然大小

此外,大小char由3.9.1 /描述为:

  1. [...]大到足以存储实现的基本字符集的任何成员.

1.7/1以更具体的术语定义:

  1. C++内存模型中的基本存储单元是字节.一个字节至少足以包含基本执行字符集的任何成员,并且由连续的位序列组成,其数量是实现定义的.

这导致我得出以下结论:

1 == sizeof(char) <= sizeof(short int) <= sizeof(int) <= sizeof(long int)
Run Code Online (Sandbox Code Playgroud)

where sizeof告诉我们这个类型的字节数.此外,它是实现定义的字节中有多少位.我们大多数人可能习惯于处理8位字节,但标准表示n字节中有位.


这篇文章中,Alf P. Steinbach说:

long保证(至少)32位.

根据标准,这一切都在我理解C++基本类型的大小面前.通常情况下,我只是将这句话视为初学者错误,但由于这是Alf,我认为值得进一步调查.

那么,你呢?标准长期保证至少为32位?如果是这样,请具体说明如何进行此保证.我只是没有看到它.

  1. C++标准特别指出,为了了解C++,你必须知道C(1.2/1)1

  2. C++标准隐含地定义了long可容纳的值的最小限制LONG_MIN- LONG_MAX 2

所以无论多大long,它都必须足够大才能将LONG_MIN保持为LONG_MAX.

但Alf和其他人特别指出,long必须至少为32位.这就是我想要建立的.C++标准明确指出一个字节中的位数没有指定(可能是4,8,16,42)那么连接如何能够容纳数字LONG_MIN-LONG_MAX至少为32位?


(1)1.2/1:以下参考文件对于本文件的应用是必不可少的.凡是注日期的引用文件,仅引用的版本适用.凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本标准.

  • ISO/IEC 2382(所有部分),信息技术 - 词汇
  • ISO/IEC 9899:1999,编程语言 - C.
  • ISO/IEC 10646-1:2000,信息技术 - 通用多八位字节编码字符集(UCS) - 第1部分:体系结构和基本多语言平面

(2)定义 …

c++ standards language-lawyer long-integer

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