Update item6.md

This commit is contained in:
猫耳堀川雷鼓 2021-02-01 22:27:32 +08:00 committed by GitHub
parent fe778ea121
commit a926bac7c3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -41,7 +41,7 @@ auto highPriority = features(w)[5]; //推导highPriority的类型
这个值取决于`std::vector<bool>::reference`的具体实现。其中的一种实现是这样的(`std::vector<bool>::reference`)对象包含一个指向机器字(*word*)的指针,然后加上方括号中的偏移实现被引用*bit*这样的行为。然后再来考虑`highPriority`初始化表达的意思,注意这里假设`std::vector<bool>::reference`就是刚提到的实现方式。
调用`features`将返回一个`std::vector<bool>`临时对象,这个对象没有名字,为了方便我们的讨论,我这里叫他*`temp`*。`std::vector<bool>::reference`包含一个指向*word*的指针(*`temp`*管理这个*word*中的*bit*s还有相应于第5个*bit*的偏移。`highPriority`是这个`std::vector<bool>::reference`的拷贝,所以`highPriority`也包含一个指针,指向`temp`中的这个*word*加上相应于第5个*bit*的偏移。在这个语句结束的时候`temp`将会被销毁,因为它是一个临时变量。因此`highPriority`包含一个悬置的(*dangling*)指针,如果用于`processWidget`调用中将会造成未定义行为:
调用`features`将返回一个`std::vector<bool>`临时对象,这个对象没有名字,为了方便我们的讨论,我这里叫他`temp`。`std::vector<bool>::reference`包含一个指向*word*的指针(`temp`管理这个*word*中的*bit*s还有相应于第5个*bit*的偏移。`highPriority`是这个`std::vector<bool>::reference`的拷贝,所以`highPriority`也包含一个指针,指向`temp`中的这个*word*加上相应于第5个*bit*的偏移。在这个语句结束的时候`temp`将会被销毁,因为它是一个临时变量。因此`highPriority`包含一个悬置的(*dangling*)指针,如果用于`processWidget`调用中将会造成未定义行为:
````cpp
processWidget(w, highPriority); //未定义行为!