热门
最新
红包
立Flag
投票
同城
我的
发布
保持热爱共赴山海
CSDN App 扫码分享
评论
1
打赏
- 复制链接
- 举报
下一条:
让我们考虑使用一个函数,该函数返回字符串的向量,并具有:• 一个输出用空格分隔的字符串的循环,如上所述;• 第二个循环,打印第一个字符串的字母,用空格分隔:std::vector<std::string> createStrings() { return { "Example”, "vector", "of", "strings" }; } int main() { for ( auto w: createStrings() ) { std::cout << w << " "; } std::cout << std::endl; for ( auto c: createStrings()[0] ) { std::cout << c << " "; } std::cout << std::endl; } 如果我们执行此操作,第一个循环将按预期运行,但第二个循环将调用未定义的行为 。 问题是 createStrings()[0] 有两个函数调用。最里面的调用是 createStrings 的调用 ,最外面的调用是对索引运算符[ ]的调用。未定义行为的原因是 “ createStrings ”返回的临时对象 用作“ operator[ ]”调用的参数,因此,根据 C++ 的规则,临时对象的生存期不会延长。————————————————版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。原文:带你走近MISRA C++:2023:MISRA C++的发展史|MISRA C++:2008与AUTOSAR C++14|MISRA C++:2023|MISRA C++:2023规则分类原文链接:https://polelink.csdn.net/663050a275c93e11c8040c74.html