ç±»è”åˆçš„类和å˜ä½“æˆå‘˜

时间:2019-04-05 20:26:18

标签: c++ language-lawyer

[class.union.anon]/4:

  

ç±»è”åˆä½“类是è”åˆä½“或具有匿åè”åˆä½“çš„ç±»   作为直接æˆå‘˜ã€‚类似工会的类X具有一组å˜ä½“æˆå‘˜ã€‚   如果X是è”åˆï¼Œåˆ™ï¼ŒXçš„éžé™æ€æ•°æ®æˆå‘˜ä¸æ˜¯   匿åè”åˆæ˜¯Xçš„å˜ä½“æˆå‘˜ã€‚   作为Xæˆå‘˜çš„匿åè”盟的数æ®æˆå‘˜ä¹Ÿæ˜¯   Xçš„å˜ä½“æˆå‘˜ã€‚一个工会的最多一个å˜ä½“æˆå‘˜å¯ä»¥å…·æœ‰   默认æˆå‘˜åˆå§‹åŒ–器。 [示例:

在下é¢çš„第一个示例中,类C ä¸æ˜¯ç±»çš„è”åˆï¼Œä½†æ˜¯æˆ‘们å¯ä»¥è¯´è”åˆå­å¯¹è±¡uçš„æˆå‘˜æ˜¯...çš„å˜ä½“æˆå‘˜ã€‚ C?如果答案是肯定的,为什么?

struct C{  
    int i;  
    union{  
        int x;  
        char c;  
        float f;  
    } u;
};

在我的第二个示例中,类C 是一个类似è”åˆçš„类,但是å¯ä»¥è¯´è”åˆå­å¯¹è±¡uçš„æˆå‘˜æ˜¯{{ 1}}?如果答案是肯定的,为什么?

C

1 个答案:

答案 0 :(得分:1)

通过对引用的段è½çš„简å•é˜…读,两个问题的答案å‡â€‹â€‹ä¸ºâ€œå¦â€ã€‚

æ ¹æ®æ ‡å‡†ï¼ŒåŒ¿å和命å工会æˆå‘˜çš„处ç†æ–¹å¼å®Œå…¨ä¸åŒã€‚例如,如果Cçš„å˜ä½“æˆå‘˜å…·æœ‰éžå¹³å‡¡çš„æžæž„函数,则C负责以æŸç§æ–¹å¼çŸ¥é“è¦é”€æ¯å“ªä¸€ä¸ªï¼ˆç¼–译器ä¸ä¼šä¸ºC生æˆé»˜è®¤æžæž„函数),而如果Cçš„æˆå‘˜u是一个命åè”åˆï¼Œåˆ™Cçš„æžæž„函数将简å•åœ°è°ƒç”¨uçš„æžæž„函数。