gpt4 book ai didi

C++11 局部静态值不作为模板参数

转载 作者:可可西里 更新时间:2023-11-01 17:59:27 24 4
gpt4 key购买 nike

在 C++11 中,我似乎无法使用局部静态值作为模板参数。例如:

#include <iostream>
using namespace std;

template <const char* Str>
void print() {
cout << Str << endl;
}

int main() {
static constexpr char myStr[] = "Hello";
print<myStr>();
return 0;
}

在 GCC 4.9.0 中,代码错误为

error: ‘myStr’ is not a valid template argument of type ‘const char*’ because ‘myStr’ has no linkage

在 Clang 3.4.1 中,代码错误为

candidate template ignored: invalid explicitly-specified argument for template parameter 'Str'

两个编译器都使用 -std=c++11 运行

在线编译器的链接,您可以在其中选择许多 C++ 编译器之一:http://goo.gl/a2IU3L

请注意,将 myStr 移到 main 之外会按预期编译和运行。

请注意,我看过 C++11 之前的类似 StackOverflow 问题,大多数表明这应该在 C++11 中解决。例如Using local classes with STL algorithms

最佳答案

显然“无链接”意味着 "The name can be referred to only from the scope it is in."包括局部变量。这些在模板参数中无效,因为它们的地址在编译时显然是未知的。

简单的解决方案是使它成为一个全局变量。它并没有真正改变您的代码。

另见 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52036

关于C++11 局部静态值不作为模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26966901/

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