gpt4 book ai didi

c++ - const_reference_type 不编译但 const value_type& 编译

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:02:28 28 4
gpt4 key购买 nike

#include <iostream>

template <typename T>
struct ref_exp{
typedef T value_type;
typedef value_type& reference_type;
typedef const reference_type const_reference_type;

ref_exp(value_type data): _data(data){}
const_reference_type data() const {return _data;}
private:
value_type _data;
};

int main(){
ref_exp<int> exp1(2);
std::cout << exp1.data() << std::endl;

return 0;
}

上面的代码无法编译

ref.cpp: In member function ‘T& ref_exp<T>::data() const [with T = int]’:
ref.cpp:17: instantiated from here
ref.cpp:10: error: invalid initialization of reference of type ‘int&’ from expression of type ‘const int’

但是,如果我将 const_reference_type data() const 替换为 const value_type& data() const,它就会起作用。另外,如果我替换 typedef const reference_type const_reference_type
使用 typedef const value_type& const_reference_type 编译

最佳答案

您的 const_reference_type typedef 与您的想法不符:

typedef const reference_type const_reference_type;

const_reference_typeint& const - 也就是说,整个类型 reference_type 都应用了 const - 并且const 引用不存在,因此您得到 int&。您没有得到预期的 const int&

如您所述,这里的解决方法是:

typedef const value_type& const_reference_type;

这里的提示是不要将 typedef 视为只是类型名称的查找和替换,因为它不是那样的。

关于c++ - const_reference_type 不编译但 const value_type& 编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14428144/

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