【发布时间】:2021-12-30 14:19:38
【问题描述】:
我正在尝试理解下面的代码 sn-p
template <typename T>
class testopaque {
public:
void test(T var = T()) {}
};
使用指针类型示例 int * 调用时,默认参数如何工作
int main() {
testopaque<int *> obj1;
obj1.test();
}
当调用 obj1.test() 时编译器会生成什么。尝试时出现编译器错误
int main() {
int * var = int *();
}
error: expected primary-expression before ‘int’
int * ptr = int *();
【问题讨论】:
-
它更像是
using T = int*; T var = T();编译 - 实时 - godbolt.org/z/vYzoxza89 -
长话短说,默认初始化的指针是零初始化的指针。它被初始化为一个空指针。