C++中如何像Java一样单行创建类实例变量?
C++ 单行创建类变量的实现方法
你定义的point属于C中的聚合类,从C11标准开始就有多种单行创建的实现方式,无需提前声明临时变量即可直接插入容器或完成初始化:
1. 向容器插入元素的场景(对应你提到的push_back到vector的需求)
- 写法1:聚合初始化直接传参(C++11及以上通用,兼容性最好)
无需修改类定义,直接通过花括号传递成员值即可:#include <vector> class point{ public: int x; int y; }; int main() { std::vector<point> vec; // 单行完成元素插入,无需单独创建临时变量 vec.push_back({10, 20}); return 0; } - 写法2:显式构造临时对象
如果你给类添加了带参构造函数:
可以直接传入临时对象:class point{ public: int x; int y; point(int x_, int y_) : x(x_), y(y_) {} };vec.push_back(point(10, 20)); - 写法3:更高性能的emplace_back(C++11及以上支持)
直接在容器的内存空间中构造对象,避免生成临时对象拷贝,性能更优:// 有自定义构造函数时C++11即可直接使用 vec.emplace_back(10, 20); // 无自定义构造函数的聚合类需要C++17及以上标准支持
2. 动态分配对象的场景(对应Java的new point(x,y)写法)
如果你需要创建堆上的对象,也可以单行完成:
// 裸指针写法(不推荐,需要手动delete释放内存避免泄漏) point* p = new point{10, 20}; // 推荐使用智能指针,自动管理内存无需手动释放 auto p = std::make_unique<point>(10, 20); // C++14及以上支持 auto p = std::make_shared<point>(10, 20);
内容的提问来源于stack exchange,提问作者user15757380
相关产品推荐
相关产品推荐

