gpt4 book ai didi

c++ - "Lifetime"限制是在 C++ 中实现的吗?

转载 作者:太空狗 更新时间:2023-10-29 23:13:27 25 4
gpt4 key购买 nike

我在看 CppCon 2015 的演讲 Writing Good C++14... By Default通过 Herb Sutter,他指的是一些终身限制,例如:

template<class Key, class T, /*...*/> class map {
iterator insert(const_iterator pos[[lifetime(this)]], const value_type&);
template <class InIter> void insert(InIter first, InIter last [[lifetime(first)]]);
// ...
};

这样

map<int,string> m = {{1,"one"}, {2,"two"}}, m2;
m.insert(m2.begin(), {3,"three"});// ERROR, m2.begin() points to m2, not m
m.insert(m.begin(), {3,"three"});// ok, m.begin() points to m
m.insert(m.begin(), m.end()));// 2 ERRORS: (a) params point to m, and (b) m is modifiable by m.insert
m.insert(m2.begin(), m.end()));// ERROR, param1 points to m2, but param2 points to m
m.insert(m2.begin(), m2.end());// ok, params point to m2, m2 not modifiable by m.insert

我想知道,这个“终生”功能是已经实现了,还是仍在愿望 list 中?

最佳答案

Sutter 的演讲是关于C++ 核心指南不是C++ 国际标准。国际标准是在 ISO 流程下创建和维护的,是一项国际条约,作为 C++ 的定义。 C++ 核心指南实际上并不是 C++ 的一部分,而是描述如何很好地使用 C++ 的社区成果

C++ 核心指南定义了一组关于代码质量和安全(包括生命周期安全)的指南。它还定义了一个支持库、一组最小的代码内注释(使用属性、类型别名等),以及用于执行准则的静态分析。

原题中并没有提到这个问题是关于国际标准、C++核心指南、主流编译器还是相关的静态分析工具。也不清楚本题的前提是否包括对这四种事物的区分意识。

截至撰写本文时,C++ 核心指南仍在不断发展。终生安全剖析部分仍留空。同样,静态分析工具也在不断发展。 Microsoft's C++ Core Guidelines Checkers already has a preview of lifetime safety checker. Clang-Tidy does not have lifetime safety check for now.但预计 future 的发展,因此本段将过时。

个别编译器供应商可能会决定将指南的元素纳入编译过程。但这真的取决于编译器供应商,一些指南可能不适合在编译过程中强制执行。同样,指南中的一些元素可能会在未来被提议用于标准化,但其中很多不适合成为国际标准的一部分,最好留作社区指南。

关于c++ - "Lifetime"限制是在 C++ 中实现的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39158857/

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