GESP 四级 · GESP 202503 C++ 四级 第 7 题

选择题 · 答案 D

← 整套速查表 GESP 四级 全部真题

题目

给定如下代码,

struct Person {
    std::string name;
    int age;
    struct Address {
        std::string street;
        std::string city;
    };
    Address address;
};

下面描述错误的是( )。

答案:D

解题思维

答案D。C++中字符串处理可以用字符数组或string类型。sizeof和strlen的结果不同。

常见错误

仔细审题,注意限定词和否定词。用排除法缩小选项范围。

详细解析(节选)

【考点】结构嵌套|成员初始化|命名冲突控制

🎯 考纲定位 本题出自 GESP 四级 C++ 大纲“程序结构与封装”模块。命题人盯的就是考生对嵌套结构体层次控制的理解偏差——很多人以为“嵌套就是为了解决命名冲突”,就忽略了层次过多会让代码可读性崩塌,这是四级常见的概念混淆点。

🧠 解题思维 先读代码:struct Address 被定义在 struct Person 内部,所以 Person 里确实有 address 成员,且类型是 Address。再看选项 C,p.address.street 与 p.address.city 都是合法的成员访问链,顺序无限制,直接赋值即可。A、B、C 全对。D 前半句“嵌套可以减少命名冲突”没错,后半句“因此可以不必控制嵌套层次”逻辑断裂——嵌套是为了封装,层次太多会严重降低可维护性,必须主动控制。

🪤 陷阱拆解

🔄 反命题思维 如果把 D 改成“嵌套结构体的成员访问必须按定义顺序”,答案就会变 D(错)。再改一层:“嵌套结构体的成员初始化必须按定义顺序”,答案还是 D(错)。刷到这类题,先问自己:嵌套到底是为了解决命名冲突,还是为了封装层次?别被前半句带偏。

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断