gpt4 book ai didi

c++ - C++11 中基于 for 的表达式模板和范围

转载 作者:可可西里 更新时间:2023-11-01 16:38:24 26 4
gpt4 key购买 nike

据我了解,在 C++11 中,表达式模板将在基于范围的 for 上中断,因为 for (auto x : expr) 具有隐式 auto&& __range = expr 在其中,这将导致悬空引用。

有没有一种方法可以创建表达式模板类,以便它们要么在基于范围的 for 下正确运行,要么至少抛出一个编译错误?

基本上,我想防止表达式模板可以正确编译但由于悬挂引用而在运行时失败的可能性。我不介意在基于范围的 for 中使用它们之前必须将表达式模板包装在某些东西中,只要在用户忘记包装表达式模板时不会出现静默运行时错误。

最佳答案

通常您对此无能为力。如果您给出一个表达式作为范围,它必须解析为在 for 语句初始化后有效的内容。并且无法在编译时检测到任何特定类型是由 auto 推导出来的。

让你的表达系统更基于移动会更好,这样它就不必保存引用。使用 auto 会产生比尝试存储对可能死掉的东西的引用更安全的结果。如果不可移动类型的复制给您带来麻烦,那就忍受吧。

关于c++ - C++11 中基于 for 的表达式模板和范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9509530/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com