Tor*_*ius 3 c c++ size header-files c-preprocessor
是否有标准的C/C++标头,其定义为byte,kilobyte,megabyte,......?我不想做自己的定义.在我看来这很脏.
例:
if (size > MEGABYTE)
{ ... }
Run Code Online (Sandbox Code Playgroud)
unw*_*ind 14
不,没有这样的标准定义.可能是因为附加值非常小.
你经常看到这样的事情:
#define KB(x) ((size_t) (x) << 10)
#define MB(x) ((size_t) (x) << 20)
Run Code Online (Sandbox Code Playgroud)
这使用左移表示与x*1,024 相同的操作x*2 10,并且对于2 20表示相同,即1,024*1,024,即1,048,576.这"利用"了千字节,兆字节等的经典定义在计算中使用两个幂的事实.
演员size_t是好的,因为这些是大小,我们希望它们可以作为例如的参数使用malloc().
使用上面的代码,在代码中使用它们变得非常实用:
unsigned char big_buffer[MB(1)];
Run Code Online (Sandbox Code Playgroud)
或if(statbuf.st_size> = KB(8)){printf("file is 8 KB(或更大)\n"); }
但你当然可以用它们来进一步定义:
#define MEGABYTE MB(1)
Run Code Online (Sandbox Code Playgroud)
You*_*You 10
正如其他答案指出的那样,没有。C ++ 11中一个不错的解决方案是使用用户定义的文字:
constexpr std::size_t operator""_kB(unsigned long long v) {
return 1024u * v;
}
std::size_t some_size = 15_kB;
Run Code Online (Sandbox Code Playgroud)