mirror of
https://github.com/CnTransGroup/EffectiveModernCppChinese.git
synced 2025-01-13 13:50:10 +08:00
Update item6.md
This commit is contained in:
parent
fe778ea121
commit
a926bac7c3
@ -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); //未定义行为!
|
||||
|
Loading…
Reference in New Issue
Block a user