c++ - 为什么将 "score[11] = {};"和 "grade"声明为 "unsigned"而不是 "int'

标签 c++ arrays c++11 unsigned

我是 C++ 的新手,正在尝试学习数组的概念。我在网上看到了这段代码片段。对于下面的示例代码,声明是否有任何区别:

unsigned scores[11] = {};
unsigned grade; 

作为:

int scores[11] = {};
int grade; 

我想肯定有一个原因为什么 score[11] = {};grade 被声明为 unsigned,但是什么是背后的原因是什么?

int main() {
    unsigned scores[11] = {};
    unsigned grade;
    while (cin >> grade) {
        if (0 <= grade <= 100) {
            ++scores[grade / 10];
        }
    }
    for (int i = 0; i < 11; i++) {
        cout << scores[i] << endl;
    }
}

最佳答案

unsigned意味着 variable不会保持负值(或者更准确 - 它不会关心符号 - )。 scores 似乎很明显和 grades是无符号值(没有人得分 -25 )。所以,很自然地使用unsigned .

但请注意:if (0 <= grade <= 100)是多余的。 if (grade <= 100)就足够了,因为不允许使用负值。

正如 Blastfurnace 评论的那样,if (0 <= grade <= 100)甚至是不对的。如果你想要这样,你应该把它写成:

if (0 <= grade && grade <= 100)

关于c++ - 为什么将 "score[11] = {};"和 "grade"声明为 "unsigned"而不是 "int',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35595276/

相关文章:

c++ - std::random_shuffle 产生相同的结果,即使 srand(time(0)) 被调用一次

php - 访问对象中的数组

php - 关联数组,对同一键的值求和

c++ - 序列容器-为什么只有几个序列容器才支持一些表达式

c++ - 在 C++ (Win32) 中快速获取 Windows 应用程序屏幕截图的方法?

c++ - 指针数组的动态分配及其替代方案

C++ 方法重载 : base and derived parameters

c - 为什么动态二维字符数组中的值被覆盖?

c++ - STL的缺陷

c++ - 前向声明困惑