给定如下代码,
struct Person {
std::string name;
int age;
struct Address {
std::string street;
std::string city;
};
Address address;
};下面描述错误的是( )。
答案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 前半句“嵌套可以减少命名冲突”没错,后半句“因此可以不必控制嵌套层次”逻辑断裂——嵌套是为了封装,层次太多会严重降低可维护性,必须主动控制。
🪤 陷阱拆解
struct Person { Address address; };,无坑。p.address.street 合法,顺序自由,无坑。🔄 反命题思维 如果把 D 改成“嵌套结构体的成员访问必须按定义顺序”,答案就会变 D(错)。再改一层:“嵌套结构体的成员初始化必须按定义顺序”,答案还是 D(错)。刷到这类题,先问自己:嵌套到底是为了解决命名冲突,还是为了封装层次?别被前半句带偏。