我在cppreference的文档中看到了这个例子std::numeric_limits
#include <limits>
#include <iostream>
int main()
{
std::cout << "type\tlowest()\tmin()\t\tmax()\n\n";
std::cout << "uchar\t"
<< +std::numeric_limits<unsigned char>::lowest() << '\t' << '\t'
<< +std::numeric_limits<unsigned char>::min() << '\t' << '\t'
<< +std::numeric_limits<unsigned char>::max() << '\n';
std::cout << "int\t"
<< std::numeric_limits<int>::lowest() << '\t'
<< std::numeric_limits<int>::min() << '\t'
<< std::numeric_limits<int>::max() << '\n';
std::cout << "float\t"
<< std::numeric_limits<float>::lowest() << '\t'
<< std::numeric_limits<float>::min() << '\t'
<< std::numeric_limits<float>::max() << '\n';
std::cout << "double\t"
<< std::numeric_limits<double>::lowest() << '\t'
<< std::numeric_limits<double>::min() << '\t'
<< std::numeric_limits<double>::max() …Run Code Online (Sandbox Code Playgroud) 在查看一些c头文件(特别是stdarg.h)时,我注意到一条非常特殊的线:
#if !defined(__STRICT_ANSI__) || __STDC_VERSION__ + 0 >= 199900L
Run Code Online (Sandbox Code Playgroud)
奇怪的部分是+ 0.零是附加的身份; 这是各种数学写作之一noop.
在上面的预处理器语句中添加零的目的是什么?我知道那里有各种奇怪的预处理器魔法,但这看起来很荒谬.
这行代码输出0:
std::cout << !+2;
Run Code Online (Sandbox Code Playgroud)
我认为它应该是35,因为'!' 有一个ASCII码,33并添加2到它等于35.
为什么会那样?