result_t work(resource_t& resource) {
lock_t ___(resource);
return work_impl(resource);
}
是å¦ä¿è¯___
çš„æžæž„函数会在work_impl()
返回åŽè¢«è°ƒç”¨ï¼Ÿæˆ–者编译器在调用___
之å‰å¯ä»¥è‡ªç”±åœ°é”€æ¯work_impl()
å—?
ç”案 0 :(得分:4)
将执行表达å¼work_impl(resource)
,结果将被å¤åˆ¶åˆ°è°ƒç”¨è€…端或用作临时。然åŽï¼Œå¯¹è±¡___
å°†è¢«ç ´å。
å¦ä¸€æ–¹é¢ï¼Œè¯·å‹¿ä½¿ç”¨__
或___
ä½œä¸ºä»»ä½•æ ‡è¯†ç¬¦çš„å‰ç¼€ã€‚它们是为编译器ä¿ç•™çš„。
ç”案 1 :(得分:2)
如果æžæž„函数是éžå¹³å‡¡çš„,则å¯èƒ½æ— 法调用它
过早地,åªè¦å…¶ä½™ä»£ç 是æ£ç¡®çš„。在
未定义行为的情况(例如,带有两个或的å˜é‡å称)
更接近_
),当然,没有任何ä¿è¯ã€‚
ç”案 2 :(得分:1)
如果没有办法区分,编译器å¯ä»¥è‡ªç”±åœ°åšä»»ä½•äº‹æƒ…。但是如果æžæž„函数具有一些程åºå¯è§çš„效果,它将始终在work_impl
返回åŽå‘生。
ç”案 3 :(得分:1)
æ¤ç¨‹åºçš„è¡Œä¸ºå®žé™…ä¸Šæ˜¯æœªå®šä¹‰ï¼Œæ ‡è¯†ç¬¦ __
是ä¿ç•™ï¼Œæˆ‘们å¯ä»¥ä»Žè‰æ¡ˆC ++ä¸çœ‹åˆ°æ ‡å‡†17.6.4.3
ä¿ç•™å称段 2 说:
 Â如果程åºåœ¨ä¿ç•™å®ƒçš„上下文ä¸å£°æ˜Žæˆ–定义å称,除了本æ¡æ¬¾æ˜Žç¡®å…许的å称外,其行为是未定义的。
如果我们进一æ¥æŸ¥çœ‹17.6.4.3.2
部分部分,请说明:
 Â包å«åŒä¸‹åˆ’线_ _或以下划线åŽè·Ÿå¤§å†™å—æ¯ï¼ˆ2.12)开头的æ¯ä¸ªå称都ä¿ç•™ç»™å®žçŽ°ä»¥ä¾›ä»»ä½•ä½¿ç”¨ã€‚
å› æ¤ï¼Œé™¤éžç¼–译器文档__
å¯ç”±ç”¨æˆ·ä»£ç å…费使用,å¦åˆ™ä¿ç•™ã€‚
 Âéšå¼è°ƒç”¨æžæž„函数
å› æ¤ï¼Œå¦‚æžœæ¤ç¨‹åºæœªè°ƒç”¨undefined behavior,那么éšå¼è°ƒç”¨çš„æžæž„函数的规则å¯ä»¥ä»Žæ ‡å‡†è‰æ¡ˆéƒ¨åˆ†12.4
Destructotrs 段 11 表示(强调我的)
 Â   Â- 对于在程åºç»ˆæ¢æ—¶å…·æœ‰é™æ€å˜å‚¨æŒç»æ—¶é—´ï¼ˆ3.7.1ï¼‰çš„æž„é€ å¯¹è±¡ï¼ˆ3.6.3),
       Â- 对于在线程退出处具有线程å˜å‚¨æŒç»æ—¶é—´ï¼ˆ3.7.2ï¼‰çš„æž„é€ å¯¹è±¡ï¼Œ
       Â- 对于具有自动å˜å‚¨æŒç»æ—¶é—´ï¼ˆ3.7.3ï¼‰çš„æž„é€ å¯¹è±¡ï¼Œå½“åˆ›å»ºå¯¹è±¡çš„å—退出时(6.7),
       Â- 对于临时对象的生命周期结æŸæ—¶æž„é€ çš„ä¸´æ—¶å¯¹è±¡ï¼ˆ12.2),
 Â
è¿™æ„味ç€é€€å‡ºwork()
时将调用自动对象的æžæž„函数,这必须在返回结果åŽå‘生。我们å¯ä»¥è¿›ä¸€æ¥çœ‹åˆ°ï¼Œå¯¹è±¡çš„销æ¯é¡ºåºä¹Ÿæ˜¯ä»Ž6.6
跳转è¯å¥ä¸æŒ‡å®šçš„:
 Âé€€å‡ºèŒƒå›´ï¼ˆæ— è®ºå¤šä¹ˆå·²å®Œæˆï¼‰æ—¶ï¼Œåœ¨è¯¥èŒƒå›´å†…构建的具有自动å˜å‚¨æŒç»æ—¶é—´ï¼ˆ3.7.3ï¼‰çš„å¯¹è±¡å°†æŒ‰å…¶æž„é€ çš„ç›¸å顺åºé”€æ¯ã€‚ [注:对于临时å¦ç”Ÿï¼Œè§12.2。 - åŽæ³¨]
请注æ„,包å«åŒä¸‹åˆ’线__
çš„å称,或以下划线åŽè·Ÿå¤§å†™å—æ¯å¼€å¤´çš„å称为reserved in any scope。