构造函数中指定的模板参数
Specified template parameter on a constructor
下面是我的代码:
class test{
public:
template<int B>
test(const char(&a)[B]){
std::cout<<B<<std::endl;
}
};
int main(int argc, char** argv) {
test t("test");
return 0;
}
输出:5
我正在做一些研究,发现了这段代码。它将计算字符的数量(确切地说是-1)。我想知道一个特定的int B
的用途。在模板参数中,如果我输入如下内容
class test{
public:
template<char B>
test(){
}
};
int main(int argc, char** argv) {
test t(); //error, how to make it work?
return 0;
}
我的问题是:
从我的第一个例子,它是如何准确地计算字符的数量的?在模板构造函数中指定类型的目的是什么,就像我的例子2一样,如果我有一个char类型,我如何使它工作?(我得到一个错误,当我试图编译)
在您的第一个示例中,"test"
可以被认为是const char s[5] = "test"
。从这里可以将模板构造为const char(&a)[5]
,但由于在模板定义中使用了B
,因此"5"被抓取为B
的值。
你的第二个例子/问题不清楚
c++中的字符串字面值具有常量字符数组类型。因此字符串字面值"test"
具有类型const char[5]
(字符串字面值包括结束的零)。因此,在第一个程序中,编译器可以确定模板实参,因为数组(字符串字面量)是通过引用传递的。
在第二个程序中声明
test t();
是一个返回类型为test
且没有形参的函数的声明。
如果你想在第二个程序中声明一个test类的对象,你可以这样编写程序
class test{
public:
template<char B = 'A'>
test(){
}
};
int main(int argc, char** argv) {
test t;
return 0;
}
相关文章:
- C++:使用运算符 = 调用多参数构造函数
- 通过零参数构造函数创建的 glm::mat4 应该包含哪些值?
- 好奇的混合与可变参数构造函数
- 具有默认值的单个参数构造函数是否与默认构造函数相同?
- 为什么我们需要创建一个单参数构造函数来使用临时的无名称对象
- 在可变参数构造函数中初始化常量数组
- C++ 显式多参数构造函数歧义
- 零一参数构造函数
- 可变参数构造函数中的 SFINAE
- 当没有显式关键字与单参数构造函数一起使用时,编译器可以发出警告
- 可变参数类模板和可变参数构造函数
- 确保模板参数类型与其可变参数构造函数的类型匹配
- C++默认参数构造函数与内联初始化优先级
- 如何在 c++ 中将包含复制构造函数的类的参数构造函数称为私有?
- 自动存储中没有无参数构造函数的类对象和异常
- 警告:用两个参数构造函数返回对象时,表达结果未使用
- 如何在C++中调用无参数构造函数
- 在 c++ 中具有多个参数构造函数的模板类存在问题
- 可变参数构造函数优先于用户提供的移动构造函数,除非默认
- 如何从可变参数构造函数参数构造任何对象?