相关疑难解决方法(0)

我什么时候应该使用std :: size_t?

我只是想知道我应该使用std::size_tfor循环和东西而不是int?例如:

#include <cstdint>

int main()
{
    for (std::size_t i = 0; i < 10; ++i) {
        // std::size_t OK here? Or should I use, say, unsigned int instead?
    }
}
Run Code Online (Sandbox Code Playgroud)

一般来说,何时使用的最佳做法是什么std::size_t

c++ types idiomatic size-t loop-counter

187
推荐指数
9
解决办法
9万
查看次数

你是否总是对C中的数字使用'int',即使它们是非负数?

我总是使用unsigned int来表示永远不应该是负数的值.但是今天我在代码中发现了这种情况:

void CreateRequestHeader( unsigned bitsAvailable, unsigned mandatoryDataSize, 
    unsigned optionalDataSize )
{
    If ( bitsAvailable – mandatoryDataSize >= optionalDataSize ) {
        // Optional data fits, so add it to the header.
    }

    // BUG! The above includes the optional part even if
    // mandatoryDataSize > bitsAvailable.
}
Run Code Online (Sandbox Code Playgroud)

我应该开始使用int而不是unsigned int来表示数字,即使它们不能为负数吗?

c coding-style

46
推荐指数
8
解决办法
1万
查看次数

为什么int和而不是unsigned int用于C和C++ for循环?

这是一个相当愚蠢的问题,但为什么int常用而不是unsigned int在C或C++中为数组定义for循环时?

for(int i;i<arraySize;i++){}
for(unsigned int i;i<arraySize;i++){}
Run Code Online (Sandbox Code Playgroud)

我认识到int在进行数组索引以外的操作时使用的好处以及使用C++容器时迭代器的好处.是不是因为在循环数组时无关紧要?或者我应该一起避免它并使用不同的类型,如size_t

c int unsigned for-loop

41
推荐指数
3
解决办法
2万
查看次数

无符号负原语?

在C++中,我们可以创建原语unsigned.但他们总是积极的.还有办法制作无符号负变量吗?我知道无符号这个词的意思是"没有符号",所以也不是减号( - ).但我认为C++必须提供它.

c++ primitive unsigned negative-number

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

为什么这个if条件失败用于比较负整数和正整数

#include <stdio.h>

int arr[] = {1,2,3,4,5,6,7,8};
#define SIZE (sizeof(arr)/sizeof(int))

int main()
{
        printf("SIZE = %d\n", SIZE);
        if ((-1) < SIZE)
                printf("less");
        else
                printf("more");
}
Run Code Online (Sandbox Code Playgroud)

编译后的输出gcc"more".为什么if条件,即使失败-1 < 8

c c++ comparison signed if-statement

7
推荐指数
4
解决办法
6381
查看次数

有符号和无符号整数表达式与0x80000000之间的比较

我有以下代码:

#include <iostream>

using namespace std;

int main()
{
    int a = 0x80000000;
    if(a == 0x80000000)
        a = 42;
    cout << "Hello World! :: " << a << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是

Hello World! :: 42
Run Code Online (Sandbox Code Playgroud)

所以比较有效.但是编译器告诉我

g++ -c -pipe -g -Wall -W -fPIE  -I../untitled -I. -I../bin/Qt/5.4/gcc_64/mkspecs/linux-g++ -o main.o ../untitled/main.cpp
../untitled/main.cpp: In function 'int main()':
../untitled/main.cpp:8:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if(a == 0x80000000)
             ^
Run Code Online (Sandbox Code Playgroud)

所以问题是:为什么0x80000000是unsigned int?我可以以某种方式签名以摆脱警告吗?

据我所知,0x80000000将是INT_MIN,因为它超出正整数的范围.但为什么编译器会假设我想要一个正数?

我正在使用linux上的gcc版本4.8.1 20130909进行编译.

c++

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