You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 16:36:08