可变char模板的用户定义字面值
User defined literals for variadic char template
最近,在gcc-trunk源代码中实现了"用户自定义文字"。请告诉我,我是否理解正确,我不能定义一个"用户定义文字"可变字符模板?
template<char... chars>
int operator"" _call() { return sizeof...(chars); }
...
std::cout << "method"_call;
。
我不明白为什么这个表达式是允许的:
template<char... chars>
int operator"" _call() { return sizeof...(chars); }
...
std::cout << 12345566_call;
和这个是不允许的:
template<char... chars>
int operator"" _call() { return sizeof...(chars); }
...
std::cout << method_call;
?
有什么意义?
。这是因为模棱两可吗?
谢谢。
不,这真的没有意义。字符串字面值作为两个参数传递给operator""
,其中一个是size,所以您想要的是:
size_t operator"" _call(const char*, size_t len) {
return len;
}
标准报价时间(2.14.8.5):
如果L是用户定义的字符串字面值,则设str为不含ud-suffix的字面值,并设len为str中的代码单元数(即,其长度不包括终止的null字符)。字面值L被视为形式为 的调用operator "" X (str, len)
可变变量模板形式只考虑用户定义的整数-literal(2.14.8.3)和用户定义的浮点-literal(2.14.8.4)。
对于method_call
, method
不是文字
method_call
是有效的标识符,例如some_call
或my_call
。现在想象一下,如果允许这样的标识符被operator""
重新定义,将会破坏多少代码。
相关文章:
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 使用用户定义函数的字符串反转
- 用户定义函数中的指针和输入
- Visual C++(VS2017)中用户定义的转换不明确
- 使用用户定义的参数调用future/async并调用类方法
- 带有用户定义类的c++折叠表达式
- g++用户定义的动态链接库上的全局new和delete运算符
- 直接在 unordered_map 的方法中使用哈希,而不是生成哈希的用户定义对象
- 修改"std::set"中用户定义类型的值
- 参数包构造函数在类模板中隐藏用户定义的转换
- MAKE:找不到包含的用户定义的头文件?
- C++:用户定义的显式类型转换函数错误
- 从用户定义的类生成格式字符串?
- 为用户定义的类正确调用复制构造函数/赋值运算符
- C++ 向量与用户定义的类比较?(==, <, >)
- STL 用户定义的二进制操作
- 将用户定义的类型与 std::vector 和 std::sort 一起使用
- 为什么用户定义的函数不按照给定的顺序对相同长度的元素进行排序?
- 使用宏编译时使用用户定义的数学函数,或者仅使用 c++ 中标准数学库中的函数
- C++:用户定义的类,以成员字段作为地址