我显然误解了代码。感谢您指出错误。
--原帖--
我知道整数可以用作 C++ 模板编程中的类型。令我惊讶的是,当使用诸如 2 和 3 之类的整数作为类型时,实际上可以实例化该类型之外的变量,如下面从 gcc 4.8.1 random.h
中提取的示例所示。 .
在我看来,可以声明一个变量
2 x; //not actual c++ code
并且 x 将是一个整数变量,初始化为 2
的值.
判断一个数是否为2的幂的代码:
#include <iostream>
template<typename _Tp> inline bool
_Power_of_2(_Tp __x) {
return ((__x - 1) & __x) == 0;
};
int main() {
std::cout << _Power_of_2(2) << std::endl;
std::cout << _Power_of_2(3) << std::endl;
}
输出:
1
0
有人可以根据类型和域解释这里发生了什么吗?
其他编程语言中是否有任何类似的功能可以做同样的事情,即使用具体值作为类型?
此外,此功能是否适用于其他类型,例如 struct
, string
或 float
?
谢谢,
最佳答案
在您的示例中,2
未用作类型,而是用作函数参数。由此,模板参数 _tP
被自动推断为 int
。所以 main
中的行将等同于:
std::cout << _Power_of_2<int>(2) << std::endl;
std::cout << _Power_of_2<int>(3) << std::endl;
关于C++ 模板 : intiantiating a variable out of a particular integer (as type),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22530743/