C++ 模板 : intiantiating a variable out of a particular integer (as type)

标签 c++ templates c++11 integer

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

--原帖--

我知道整数可以用作 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 , stringfloat

谢谢,

最佳答案

在您的示例中,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/

相关文章:

C++ DLL 较新版本

C++ GetProcAddress 64 位返回 32 位地址

c++ - 带参数的 HTTP GET 请求

c++ - 选择从哪个 CRTP 基类派生

c++ - 在 C++ 中对 unordered_map 使用 getter 会创建大小为 8 的无效读取

c++ - 将任意类的成员函数指针存储为类实例变量

c++ - BOOST_NO_EXCEPTIONS 是否保证与 -fno-exceptions 兼容?

c++ - 使用 typedef – 基于类的模板参数 – 在类范围之外

c++ - 推导模板的非类型名参数的值

c++ - 我的 2D 迷宫解算器无限递归并且出现堆栈溢出 - 为什么?