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

咨询C++中未绑定变量的对象初始化用法及官方文档示例

C++ 匿名临时对象用法说明

你用到的这种不绑定变量的对象初始化写法,在C里叫做匿名临时对象,是C标准明确支持的核心语法特性——C98就已支持()构造方式,C11及以后新增了列表初始化{}的创建形式。

核心语法说明

C++允许直接构造不绑定到任何命名变量的对象,这类临时对象的生命周期默认局限于当前表达式:表达式执行完毕后,临时对象会被自动销毁。

对应你的示例解析

  1. 字符串比较示例
if (std::string{params["name"]} != std::string{userDb["name"]}) {
    res.code = 401;
    res.body = "{\"success\":false}";
}

这里std::string{params["name"]}和std::string{userDb["name"]}都是通过列表初始化创建的匿名临时std::string对象,直接用于相等性比较,无需额外定义变量存储,表达式结束后两个临时对象自动销毁。

  1. 临时对象调用成员方法示例
RedisDao{}.get(key);

先通过RedisDao{}构造一个匿名的RedisDao临时对象,紧接着调用其get成员方法,方法执行完成后,这个临时对象会被立即销毁。

C++文档中的典型用法示例

以下是C++标准及常用参考文档中出现的同类用法:

  • 用临时对象作为函数参数:
    // 传递临时vector对象给函数
    void process_data(const std::vector<int>& data);
    process_data(std::vector<int>{1, 3, 5, 7});
    
  • 临时对象直接调用成员函数:
    // 创建临时string并获取其长度
    std::size_t len = std::string("example text").size();
    
  • 临时对象参与运算或条件判断:
    // 临时string与输入值比较
    if (std::string("admin") == input_username) {
        // 执行权限操作
    }
    

注意事项

  • 临时对象默认生命周期仅在当前表达式内,若将其绑定到const引用,生命周期会延长至引用的生命周期结束:
    const std::string& temp_str = std::string("hello");
    // temp_str的生命周期会持续到当前作用域结束
    
  • 若临时对象的成员方法返回对象内部的引用/指针,需注意悬垂引用问题(比如RedisDao{}.get(key)如果返回内部指针,调用后对象销毁,指针会失效)。

内容的提问来源于stack exchange,提问作者Eugene

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 00:42:42