我显然误解了代码。感谢您指出错误。
-原始帖子-
我知道有一段时间,整数可以用作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;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句