gpt4 book ai didi

c++ - 在模板类中通过引用传递

转载 作者:行者123 更新时间:2023-11-30 02:27:36 25 4
gpt4 key购买 nike

代码如下:

#include <iostream>
#include <cmath>

template<class T>
class Number {
private:
T val;
public:
Number(T& tRefArg) : val(tRefArg) {}
void print() {
std::cout << val << std::endl;
}
};

template<class R>
class RoundedNumber : public Number<R> {
public:
R val;
public:
RoundedNumber(R& tRefArg): Number<R>(tRefArg), val(tRefArg) {
val = floor(val + 0.5f);
}
void print() {
std::cout << val << std::endl;
}
};

int main() {
int i = 8;
Number<double>* myNumber = new RoundedNumber<double>(i);
}

给出错误:

2.cpp:30:56: error: invalid initialization of non-const reference of type ‘double&’ from an rvalue of type ‘double’ Number* myNumber = new RoundedNumber(i);

我认为它被视为右值,但为什么呢?

最佳答案

成员函数需要一个double,而您提供的是一个int。临时 double 是从 int 创建的,您不能将临时值绑定(bind)到引用,但可以将其绑定(bind)到 const 引用。
也就是说,您可以使用这个:

Number(const T& tRefArg) : val(tRefArg) {}

或者这个:

Number(T tRefArg) : val(tRefArg) {}

还有这个:

RoundedNumber(const R& tRefArg): Number<R>(tRefArg), val(tRefArg) {

或者这个:

RoundedNumber(R tRefArg): Number<R>(tRefArg), val(tRefArg) {

关于c++ - 在模板类中通过引用传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41527546/

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