c++ 模板类<T>,里面的成员T a; 构造函数中,a如何初始化?

如题所述

第1个回答  2016-05-05
我们把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{};

追答

你猜对了

本回答被网友采纳
相似回答