【发布时间】:2022-03-15 20:57:08
【问题描述】:
我试图创建一个 Container 类,它将使用将通过模板传递的类 Comparator 的对象。
所以我正在做类似的事情:
template<typename T>
class Container{
const T c;
};
struct Comparator{
public:
bool operator()(const int a, const int b)const{
return a < b;
}
};
int main(){
Container<Comparator> container;
return 0;
}
当我尝试编译此代码时,我收到以下错误:
e.cpp:28:27: error: uninitialized const member in 'class Container<Comparator>'
28 | Container<Comparator> container;
| ^~~~~~~~~
e.cpp:16:13: note: 'const Comparator Container<Comparator>::c' should be initialized
16 | const T c;
|
为了摆脱这个错误,我只是在Comparator 类中添加了一个默认构造函数:
struct Comparator{
public:
Comparator(){
}
bool operator()(const int a, const int b)const{
return a < b;
}
};
但我观察到的奇怪的事情是,当我将 Comparator 类的 const 对象作为普通变量(不是任何类的数据成员)时,我没有收到任何错误。
struct Comparator{
public:
bool operator()(const int a, const int b)const{
return a < b;
}
};
int main(){
const Comparator comp;
return 0;
}
所以我的问题是,为什么在类中创建 Comparator 类型的 const 对象时会出错,而不是在创建相同类型的普通 const 对象时出错?
【问题讨论】:
-
Container类中的Container() : c{} {}也解决了这个问题。 -
@mch 是的,我也试过了。但我想问的是,为什么我们在创建普通变量时不需要做任何事情,而在类中我们要么需要构造函数,要么像你提到的那样做一些事情?
标签: c++