gpt4 book ai didi

c++ - 非类型模板参数

转载 作者:太空宇宙 更新时间:2023-11-04 12:12:42 25 4
gpt4 key购买 nike

我了解到:

  • 非类型模板参数带有一些限制。通常,它们可能是常数整数值(包括枚举)或指向具有外部链接的对象的指针。

所以我写了下面的代码

1.

 template <char const* name> 

class MyClass {

};

char const* s = "hello";

MyClass<s> x; // ERROR:

此代码无效并产生错误 's' is not a valid template argument

我的第二个代码也没有用

2.

template <char const* name> 
class MyClass {

};

extern char const *s = "hello";

MyClass<s> x; //error 's' is not a valid template argument`

但奇怪的是这段代码没问题

3.

template <char const* name> 
class MyClass {

};

extern char const s[] = "hello";

MyClass<s> x; // OK

请说出这三个代码中发生了什么??

还说明如何更正错误以使其他两个代码也能正常工作。

最佳答案

来自 here: “模板参数列表中提供的非类型模板参数是一个表达式其值可以在编译时确定”。

您遇到问题是因为您的 char 指针在前两个示例中并不是真正的常量。看看这个简短的例子:

int main() {
char const *c = "foor";
std::cout << "c: " << c << std::endl;
c = "bar";
std::cout << "c: " << c << std::endl;
}

哪个会给你

c: foo
c: bar

关于c++ - 非类型模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9172937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com