为什么 std::numeric_limits::is_integer 对于 volatile 类型是假的?
Why std::numeric_limits::is_integer is false for volatile types?
std::numeric_limits<volatile int>::is_integer
计算结果为 'false'。
但是为什么呢? volatile int 不仍然是整数类型吗?我想知道这里面有没有什么深意
更新:编译器是来自 Keil 4.72 的 armcc
嗯,它的计算结果不是 false
,而是 true
:
#include <iostream>
#include <limits>
int main() {
std::cout << std::boolalpha << std::numeric_limits<volatile int>::is_integer << std::endl;
return 0;
}
你(或者,可能是你的编译器)在这里错了,因为它应该是 true。
来自 numeric_limits 页:
Additionally, a specialization exists for every cv-qualified version
of each arithmetic type, identical to the unqualified specialization,
e.g. std::numeric_limits< const int >, std::numeric_limits< volatile
int >, and std::numeric_limits< const volatile int > are provided and are
equivalent to std::numeric_limits< int >.
并且来自 numeric_limits/is_integer 页:
Standard specializations:
...
int true
...
std::numeric_limits<volatile int>::is_integer
计算结果为 'false'。
但是为什么呢? volatile int 不仍然是整数类型吗?我想知道这里面有没有什么深意
更新:编译器是来自 Keil 4.72 的 armcc
嗯,它的计算结果不是 false
,而是 true
:
#include <iostream>
#include <limits>
int main() {
std::cout << std::boolalpha << std::numeric_limits<volatile int>::is_integer << std::endl;
return 0;
}
你(或者,可能是你的编译器)在这里错了,因为它应该是 true。
来自 numeric_limits 页:
Additionally, a specialization exists for every cv-qualified version of each arithmetic type, identical to the unqualified specialization, e.g. std::numeric_limits< const int >, std::numeric_limits< volatile int >, and std::numeric_limits< const volatile int > are provided and are equivalent to std::numeric_limits< int >.
并且来自 numeric_limits/is_integer 页:
Standard specializations:
...
int true
...