C++中operator"" _Bq为何非法?标准依据及示例解析
用户定义字面量的语法规则解析
先明确核心规则:C++里声明用户定义字面量运算符时,operator""必须直接紧跟后缀标识符,中间不能有任何空格。
合法案例解析
double operator""_Bq(long double); 之所以合法,是因为""和_Bq直接连在一起,构成了完整的用户定义字面量运算符名称operator""_Bq。这里的_Bq是符合C++标识符规则的后缀(以下划线开头,后续为字母,完全满足标识符命名要求),编译器会将其识别为一个整体的运算符符号,用于匹配123.4_Bq这类字面量调用。
非法案例解析
double operator"" _Bq(long double); 里""和_Bq之间加了空格,直接破坏了运算符名称的整体性:
- 编译器会先把
operator""当成独立符号,但单独的operator""不是合法运算符——它必须和后缀标识符绑定才能构成用户定义字面量运算符; - 后面的
_Bq会被当成无关的独立标识符,导致整个声明出现语法错误,编译器无法识别这是有效的用户定义字面量运算符声明。
规则补充说明
关于用户定义字面量的规范明确指出:带后缀的用户定义字面量运算符格式为operator""直接后跟后缀标识符,后缀必须是合法的C++标识符(不能以数字开头,仅由字母、数字、下划线组成,且不能是关键字)。空格会将operator""和后缀拆分为两个独立语法单元,完全违反格式要求。
比如这些写法同样非法:
operator"" 123(后缀以数字开头,且存在空格)operator"" -Bq(用减号分隔,未直接连接)
内容的提问来源于stack exchange,提问作者Enlico
相关产品推荐
相关产品推荐

