c ++模板:从特定整数(作为类型)中初始化一个变量

天花

我显然误解了代码。感谢您指出错误。

-原始帖子-

我知道有一段时间,整数可以用作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

有人可以从类型和域的角度解释这里发生了什么吗?

其他编程语言中是否有可以执行相同操作(即使用具体值作为类型)的相似功能?

还有,就是这个特性可用于其他类型,例如structstringfloat

谢谢,

安德斯

在您的示例中,2不是用作类型,而是用作函数参数。据此,模板参数_tP自动推导为int因此,其中的main行将等效于:

std::cout << _Power_of_2<int>(2) << std::endl;
std::cout << _Power_of_2<int>(3) << std::endl;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

C ++:默认在模板函数中初始化整数类型

如何在 C++ 中初始化一个局部结构对象(不能创建一个新对象作为局部变量)?

在C中初始化一个联合

在C ++中初始化一个指针

C:在另一个函数中初始化动态类型的2D矩阵

模板函数中的C ++静态变量初始化

C++:在结构中初始化模板变量

如何声明一个全局 const 变量并用 C 中的函数对其进行初始化?

C ++警告:在一个声明中初始化从double到float的截断,但在另一个声明中不初始化

如何从C中的另一个文件初始化文件中的全局值?

如何在C#中初始化一个空数组?

在C中初始化一个可变大小的布尔数组

在C ++中初始化一个二维数组

在C中声明并初始化一个新的char数组后,将更改varible

如何在 C++ 中声明一个零初始化的类成员?

C ++:使用另一个类中的参数初始化对象数组

我如何在C中初始化一个二维数组

用C ++中的数组初始化一个类

在Swift中隐藏一个Objective-C初始化程序(或方法)

在C中初始化一个16mb数组

如何使用 PageObject 模型在 C# 中初始化一个完整的类?

用 C 中的 int 值初始化一个双精度数组

在C#中初始化一个类的多个对象的最佳方法

如何初始化一个类似 python 的列表并在 C++ 中写入文件

在 C++ 类中初始化另一个类

仅为特定类型初始化 C++ 模板类的成员

在C中初始化const变量

始终在C中初始化变量

用C中的整数广播全局变量指针初始化全局变量