使用"const&"调用模板?
invoke template with `const&`?
这似乎是合法的
template<const int& x, int y>void fn() {}
但是我怎么称呼它?如果它是 y 类型,只有 fn<1>()
似乎有效(但不是fn<intvar>()
)。const&让我感到困惑,特别是当intvar似乎不适用于int y时。这是完全错误/非法的吗?我正在使用 clang 3.2
引用需要外部链接和模板参数的指针(对于C++11,内部链接,但需要静态存储持续时间)
因此,如果必须使用 const int &
作为模板参数,则需要将其作为全局范围内的extern
。
extern const int a = 2;
fn<a,1>();
参考具有静态存储持续时间和外部链接的int
:
template<const int& x, int y>void fn() {}
int x = 0;
int main() {
fn<x,2>();
}
我认为 C++11 放宽了对外部链接的要求,但我尝试的编译器如果没有外部链接,仍然抱怨。
相关文章:
- 使用对const结构的const数组的引用进行构造
- 使用 std::string () const 函数启动线程或未来
- 在运算符重载定义中使用成员函数(const错误)
- 使用共享指针的函数调用,其对象应为 const
- 为什么 GCC 在使用类型别名时处理 const reinterpret_cast不同?
- 在 Arduino 上使用 sscanf 会导致与 const char * 不匹配,并且返回值始终相同,尽管输入值不同
- 在函数中使用 const int size 参数创建数组会在 Visual Studio 中抛出错误 C++:表达式的计
- 使用 fopen 打开 .pak 文件并使该文件应用于 const 无符号字符* (C++)
- 在 typedef 内部使用 const 关键字和在 typedef 外部使用 const 关键字之间有区别吗?
- 类型为 "Bucket&"(未限定的 const 限定)的引用不能使用 "SortedList." 类型的值进行初始化 如何修复此错误?
- 在 constexpr 构造函数 (c++17) 中赋值到 const char * 在使用 Android NDK 时
- 如果我在 const 函数上使用指针,我可以返回什么?
- 将 const 转换为 const char* 无效,我该如何解决?使用 gcc7 时失败
- 当设置为 const 变量时使用 nullptr
- 何时应在构造函数参数中使用 const C++?
- 使用 const char* 键映射 C++ 检索空值
- 无法使用类型 'const char *' 的左值初始化类型 'char *' 的成员子对象
- 在其他容器中使用 boost::container::static_vector 时,GCC 编译错误"将'const s'绑定到类型's&'的引用丢弃限定符"
- c++模板和const(使用auto在没有编译器警告的情况下发生冲突)
- 使'const'使用类型特征的结果