【发布时间】:2011-04-09 07:43:23
【问题描述】:
我目前正在研究Accelerated C++,并在练习 2-3 中遇到了一个问题。
程序概览 - 程序基本上采用名称,然后在星号框架内显示问候语 - 即 Hello !被 * 包围。
练习 - 在示例程序中,作者使用const int 来确定问候语和星号之间的填充(空格)。然后,作为练习的一部分,他们要求读者询问用户他们希望填充有多大。
这一切似乎很容易,我继续向用户询问两个整数 (int) 并存储它们并更改程序以使用这些整数,删除作者使用的整数,尽管我得到以下内容警告;
Exercise2-3.cpp:46:警告:有符号和无符号整数表达式之间的比较
经过一些研究,这似乎是因为代码尝试将上述整数之一 (int) 与string::size_type 进行比较,这很好。但我想知道 - 这是否意味着我应该将其中一个整数更改为 unsigned int?明确说明我的整数是有符号还是无符号重要吗?
cout << "Please enter the size of the frame between top and bottom you would like ";
int padtopbottom;
cin >> padtopbottom;
cout << "Please enter size of the frame from each side you would like: ";
unsigned int padsides;
cin >> padsides;
string::size_type c = 0; // definition of c in the program
if (r == padtopbottom + 1 && c == padsides + 1) { // where the error occurs
上面是相关的代码,c 的类型是string::size_type,因为我们不知道问候可能会持续多久 - 但是为什么我现在遇到这个问题,而作者的代码没有得到使用const int时的问题?另外——对于可能已经完成Accelerated C++的任何人——这本书后面会解释吗?
我在通过 Geany 使用 g++ 的 Linux Mint 上,如果这有助于或有所作为(正如我读到的那样,在确定 string::size_type 是什么时它可以)。
【问题讨论】:
-
不会有人认为您无论如何都想要无符号整数吗?我想不出为什么顶部和底部应该是负数的合乎逻辑的原因
-
这是真的,我在上面的帖子中也提到了这一点,但我仍然不明白为什么作者的示例程序中使用 const int 时没有出现这个问题?我相信我会在书中谈到这一点,但我不禁好奇。
-
报废 - 显然在那种情况下它没有发出警告,因为 int 总是 1...哎呀。
-
一般来说,增加范围不值得为计数使用
unsigned整数类型的麻烦。无符号数也有保证的环绕行为,使它们的效率略低。 -
作者可能看到了同样的警告,只是忽略了它。不要以为书籍的作者比普通程序员知识渊博或细心。
标签: c++ unsigned-integer