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

C++值初始化与默认成员初始化:能否断言指针指向空字符串?

C++值初始化后指针指向断言问题解答

代码示例

struct MyType {
  const char *pointer{""};
};

struct MyTypeHolder {
 MyType my_type;

 MyType &GetMyType() { return my_type; }
};

int main () {
 MyTypeHolder my_type_holder;

 auto &my_type = my_type_holder.GetMyType();

 my_type = MyType{};

 // May one assert that my_type.pointer points to the empty string?
}

问题描述

在上述示例中,my_type = MyType{}会对MyType类型的临时对象执行值初始化。由于MyType的非静态成员带有默认成员初始化器,请问能否断言该对象完成值初始化后,pointer指向空字符串?

解答

可以明确断言my_type.pointer指向空字符串,理由如下:

  • 值初始化的行为:MyType{}属于值初始化操作,对于MyType这种聚合类型,值初始化会逐一初始化其非静态成员。这里pointer成员带有默认成员初始化器"",因此临时对象的pointer会被直接初始化为指向字符串字面量""的地址。
  • 拷贝赋值的行为:MyType是聚合类型,编译器会自动生成默认的拷贝赋值运算符,该运算符会直接拷贝临时对象中pointer成员的地址值到my_type的pointer成员中。
  • 字符串字面量的生命周期:字符串字面量""是程序全局存储区的常量,其生命周期贯穿整个程序运行期,因此拷贝后的指针始终有效,且明确指向空字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 03:22:10