用例:
class A {
static int s_common;
public:
static int getCommon () const { s_common; };
};
通常会导致错误:
 Â错误:é™æ€æˆå‘˜å‡½æ•°'static int A :: getCommon()'ä¸èƒ½æœ‰   CV-é™å®šç¬¦
è¿™æ˜¯å› ä¸ºconst
仅适用于this
指å‘的对象,static
æˆå‘˜å‡½æ•°ä¸ä¸å˜åœ¨è¯¥å¯¹è±¡ã€‚
但如果å…许,static
会员功能" const" nesså¯èƒ½å¾ˆå®¹æ˜“与static
æ•°æ®æˆå‘˜ç›¸å…³ã€‚
为什么C ++ä¸ä¸å˜åœ¨æ¤åŠŸèƒ½;它背åŽçš„ä»»ä½•é€»è¾‘åŽŸå› ï¼Ÿ
ç”案 0 :(得分:8)
 Â但是如果å…许的è¯ï¼Œé™æ€æˆå‘˜å‡½æ•°çš„“constâ€å¯èƒ½å¾ˆå®¹æ˜“与é™æ€æ•°æ®æˆå‘˜ç›¸å…³ã€‚
è¿™æ˜¯ä½ çš„é—®é¢˜å˜å¾—困惑的地方。声明为const
çš„éžé™æ€æˆå‘˜å‡½æ•°ä»ç„¶å…·æœ‰å¯¹é™æ€æ•°æ®æˆå‘˜çš„éžconst
访问æƒé™ã€‚ const
仅适用于this
(å³ï¼šéžé™æ€æ•°æ®æˆå‘˜ï¼‰ã€‚
é™æ€æˆå‘˜å‡½æ•°åœ¨è¯æ³•ä¸Šä»¥ç›¸åŒçš„æ–¹å¼ä½¿ç”¨const
没有任何æ„义,但结果完全ä¸åŒï¼ˆå³ï¼šè®¿é—®é™æ€æ•°æ®æˆå‘˜const
)。
æ¤å¤–,é™æ€æ•°æ®æˆå‘˜åªä¸è¿‡æ˜¯å…·æœ‰ç±»è®¿é—®æŽ§åˆ¶ï¼ˆå…¬å…±/ç§æœ‰/ç‰ï¼‰çš„类范围全局å˜é‡ã€‚å› æ¤ï¼ŒæŸäº›å‡½æ•°å¯¹å®ƒä»¬å…·æœ‰ä¸åŒçš„const
访问æƒé™æ˜¯æ²¡æœ‰æ„义的,尤其是基于它们的ç¾å。
ç”案 1 :(得分:7)
cv-qualifiers
å½±å“函数的ç¾åã€‚æ‰€ä»¥ä½ å¯ä»¥ï¼š
class A {
static int s_common;
public:
static void getCommon () const { };
static void getCommon () { };
};
现在......ä½ æ€Žä¹ˆç§°å‘¼const
?没有const
对象å¯ä»¥è°ƒç”¨å®ƒï¼ˆå¥½å§ï¼Œä½ å¯ä»¥åœ¨const
对象上调用它,但这ä¸æ˜¯é‡ç‚¹ã€‚)
我åªæ˜¯çŒœæµ‹ï¼Œå¯èƒ½è¿˜æœ‰å…¶ä»–åŽŸå› ã€‚ :)
ç”案 2 :(得分:5)
在æˆå‘˜å‡½æ•°ä¸Šä½¿ç”¨const
cv-qualifier的基本原ç†æ˜¯ï¼š
æŒ‡ç¤ºä¼ é€’ç»™æˆå‘˜å‡½æ•°çš„éšè—指针this
是ä¸å¯å˜çš„ï¼Œå¹¶ä¸”æ— æ³•ä¿®æ”¹ã€‚ static
æˆå‘˜å‡½æ•°æ²¡æœ‰éšè—çš„this
å‚æ•°ï¼Œå› æ¤const
æˆå‘˜å‡½æ•°çš„static
æ¯«æ— æ„义。
但是如果å…许的è¯ï¼Œé™æ€æˆå‘˜å‡½æ•°çš„“constâ€å¯èƒ½å¾ˆå®¹æ˜“与é™æ€æ•°æ®æˆå‘˜ç›¸å…³ã€‚
è¿™ä¸æ˜¯å¼€å§‹ä½¿ç”¨const
é™å®šè¯çš„ç†ç”±ï¼Œè¿™å¯ä»¥ä»Žä½ ä¸èƒ½å°†cv-qualifiers应用于自由函数的事实ä¸çœ‹å‡ºæ¥ã€‚ cv-qualifiers
åªç”¨äºŽthis
,å³è°ƒç”¨å…¶åŠŸèƒ½çš„对象。
ç”案 3 :(得分:2)
ä¸æ”¹å˜ä»»ä½•å…¨å±€çŠ¶æ€çš„函数是纯粹的。 C ++ 11在特定平å°ä¸Šå¼•å…¥äº†å¯èƒ½åŒ…å«[[pure]]
的属性。
const
的一个问题是它是该函数的类型的一部分。将static const
函数分é…给“普通â€å‡½æ•°æŒ‡é’ˆéœ€è¦ç‰¹æ®Šçš„转æ¢ï¼Œå¼ºåˆ¶è½¬æ¢æˆ–è¡°å‡è§„则。æ£å¦‚Luchian所æ到的,它将å…许完全模糊的é‡è½½ã€‚
基本上,您æ£åœ¨æ述从static
æˆå‘˜æž„建å•ä¸ªå¯¹è±¡ï¼Œå…±äº«ä¸€ä¸ªé€šç”¨çš„åˆæ ¼é—´æŽ¥è®¿é—®è·¯å¾„。为了使éžconst对象显示为const,必须通过æŸäº›ä¸œè¥¿è®¿é—®å®ƒï¼Œä½†æ˜¯æ²¡æœ‰this
。它的decltype
会改å˜å—?没有好的ç”æ¡ˆã€‚å¦‚æžœä½ æƒ³è¦æ‰€æœ‰è¿™äº›ï¼Œé‚£ä¹ˆå°†å®ƒä»¬æ˜Žç¡®åœ°æ”¾åœ¨class
对象ä¸ã€‚
ç”案 4 :(得分:1)
我的猜测是,在æˆå‘˜å‡½æ•°ä¸Šä½¿ç”¨static
å’Œconst
æ¥å¼•ç”¨é™æ€æˆå‘˜å˜é‡çš„常é‡æ ¹æœ¬å°±ä¸ä¼šè¢«è§†ä¸ºä¸€ä¸ªé€‰é¡¹ã€‚ IMOä½ çš„å»ºè®®æ˜¯æ··åˆè¿™ä¸¤ä¸ªå…³é”®è¯çš„一ç§å¥‡æ€ªçš„(但也许是明智的)方å¼ã€‚
ç”案 5 :(得分:1)
好问题。
我认为概念上的常é‡é€‚用于明确定义的对象或数æ®ç»“构。ä¸æ˜¯å…¨çƒ/é™æ€ç‰ç‰ã€‚
åŒæ ·åœ°ï¼Œæˆ‘å¯èƒ½ä¼šé—®ä¸ºä»€ä¹ˆå…¨å±€ï¼ˆæˆ–者特定于命å空间的)函数å¯èƒ½ä¸æ˜¯const
,å³å®ƒå¯èƒ½æ‰¿è¯ºä¸ä¿®æ”¹ä»»ä½•å…¨å±€ï¼ˆæˆ–命å空间特定的)å˜é‡ã€‚
这并没有太多æ„义æ•æˆ‘直言。但是,是的,属于特定类的é™æ€æˆå‘˜çš„å¸¸é‡ - 这个å¯èƒ½åœ¨æŸäº›æƒ…况下有用æ•æˆ‘直言。