相关疑难解决方法(0)

如何在C++中编写一个简短的文字?

非常基本的问题:如何short用C++ 编写文字?

我知道以下内容:

  • 2 是一个 int
  • 2U 是一个 unsigned int
  • 2L 是一个 long
  • 2LL 是一个 long long
  • 2.0f 是一个 float
  • 2.0 是一个 double
  • '\2'是一个char.

但是我怎么写short文字呢?我尝试了,2S但它给出了编译器警告.

c++ literals

112
推荐指数
7
解决办法
5万
查看次数

如何在C++中指定unsigned char类型的整数文字?

我可以指定unsigned long类型的整数文字,如下所示:

const unsigned long example = 9UL;
Run Code Online (Sandbox Code Playgroud)

我如何为无符号字符做同样的事情?

const unsigned char example = 9U?;
Run Code Online (Sandbox Code Playgroud)

这是为了避免编译器警告:

unsigned char example2 = 0;
...
min(9U?, example2);
Run Code Online (Sandbox Code Playgroud)

我希望避免我目前所拥有的冗长的解决方法,并且没有'unsigned char'出现在调用min的行中而不在单独的行中声明变量中的9:

min(static_cast<unsigned char>(9), example2);
Run Code Online (Sandbox Code Playgroud)

c++ integer constants language-lawyer

46
推荐指数
5
解决办法
3万
查看次数

整数文字的类型默认不是int?

我刚刚回答了这个问题,它问为什么迭代直到for循环中的100亿需要更长时间(OP实际上在10分钟后中止)比迭代直到10亿:

for (i = 0; i < 10000000000; i++)
Run Code Online (Sandbox Code Playgroud)

现在我和其他许多人明显的答案是,这是因为迭代变量是32位(从未达到100亿)并且循环得到无限循环.

但是虽然我意识到了这个问题,但我仍然想知道编译器内部究竟发生了什么?

由于文字没有附加一个L,它应该是IMHO类型int,因此32位.因此,由于溢出,它应该是int范围内的正常可达.为了真正认识到无法从中获取int,编译器需要知道它是100亿,因此将其视为超过32位的常量.

这样的文字是否会自动升级到拟合(或至少是实现定义的)范围(在这种情况下至少是64位),即使没有附加L并且是这个标准行为?或者是在幕后发生了什么不同,比如UB由于溢出(整数溢出实际上是UB)?标准中的一些引用可能很好,如果有的话.

虽然最初的问题是C,但我也很欣赏C++的答案,如果有的话.

c c++ overflow literals

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

标签 统计

c++ ×3

literals ×2

c ×1

constants ×1

integer ×1

language-lawyer ×1

overflow ×1