我只是想知道我应该使用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?
我总是使用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来表示数字,即使它们不能为负数吗?
这是一个相当愚蠢的问题,但为什么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++中,我们可以创建原语unsigned.但他们总是积极的.还有办法制作无符号负变量吗?我知道无符号这个词的意思是"没有符号",所以也不是减号( - ).但我认为C++必须提供它.
#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?
我有以下代码:
#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++ ×4
c ×3
unsigned ×2
coding-style ×1
comparison ×1
for-loop ×1
idiomatic ×1
if-statement ×1
int ×1
loop-counter ×1
primitive ×1
signed ×1
size-t ×1
types ×1