rvalue 引用和模板参数
rvalue References and Template parameters
为什么不允许使用这种语法:
template<float&& value>
struct MyStruct{
float GetValue() { return value; }
};
MyStruct<12.1f> myFloat;
相反,我们必须这样做:
template<const float& value>
struct MyStruct{
float GetValue() { return value; }
};
extern constexpr float param = 12.1f;
MyStruct<param> myFloat;
我看不出有什么理由禁止第一个。
第一种语法远没有那么笨拙,第二种语法只是让 c++ 的创建者看起来只是想让事情变得困难......那么为什么会这样呢?
由于模板处理非常复杂,我认为设计人员正确地拒绝了使用其他方法可以轻松完成的功能。 模板参数的存在是为了自定义代码的行为,而不仅仅是插入常量。 这就是支持 int 模板参数的原因,因此您可以执行以下操作:
template <int SIZE> struct X {
char buffer[SIZE];
};
如果只想在类的实例中提供一个常量,请将其添加到构造函数中:
class X {
public:
X(float value_) {
value = value_;
}
float value;
};
如果你真的想要一个使用该常量的自定义类,那么:
class X71 : public X {
public:
X71() : X(7.1f) {}
};
相关文章:
- 将const引用参数初始化为默认参数会导致悬空引用吗
- 通过常量引用传递参数的矩阵模板类
- 非类型指针和引用模板参数,以及在编译时如何/为什么解析它们.c++
- 何时应通过引用传递矢量参数而不是按值传递矢量参数?
- 具有常量引用参数的函数模板专用化
- 作为参数引用
- 在 cpp 文件中隐藏采用模板参数引用的方法
- 如何传递带有通过引用传递的结构参数的函数?
- 将输入参数作为右值引用传递?
- 使用引用与指针将数组作为参数传递
- 根据模板参数引用不同基类的函数
- 默认情况下C++数组作为参数引用
- 对指针C++的参数引用
- 作为非类型模板参数引用
- 重用返回语句或按参数引用返回
- 将参数引用传递给函数C++
- 从另一个参数引用的模板可变参数
- 成员变量多态性和参数引用
- 按参数引用或按参数引用之间的差异
- 无法实例化抽象类:为什么模板参数(引用)导致这种情况