我们把C++11以后的C++叫做现代C++。
如果你用旧C++,那么你可以用这种语法:
a = T(...),或 a(...)
如果你用现代C++,那么尽量使用这种语法:
a = T{...}
如果要在堆内分配内存,加上new 关键字。但是一旦使用了new,一定要使用智能指针unique_ptr、shared_ptr或weak_ptr加持。现代C++的哲学里面,任何裸露的new都意味这BUG或缺陷(但并不是语法错误,只是编程规范)。
追问括号里的...啥意思哈,a=T()
追答...代表你要用的参数:
e.g.
// 我们定义一个函数模板foo,它在内部初始化一个实例
template<typename T, typename... Args>
void foo(Args &&... args) {
T a{std::forward<Args>(args)...};
}
追问额,好像不对
我是想问,模板类T中私有成员变量T a,在类构造函数中对a进行初始化。
a=&(new T)这个好像要有operator=
追答上面的例子是回答你...的意思,另外它也显示了如何在模板中接收参数。
模板类和非模板类的初始化并没有其它区别。
追问那如果没有参数。是不是就是a=T{};
追答你猜对了
本回答被网友采纳