C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了C 11本地静态值不用作模板参数大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我似乎无法在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移动到主编译之外并按预期运行.

注意,我已经查看了类似于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本地静态值不用作模板参数全部内容,希望文章能够帮你解决C 11本地静态值不用作模板参数所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: