C++ `对用户定义的文本运算符使用`声明
是否可以使用文本运算符的声明,C++ `对用户定义的文本运算符使用`声明,c++,namespaces,operator-keyword,using,user-defined-literals,C++,Namespaces,Operator Keyword,Using,User Defined Literals,是否可以使用文本运算符的声明,运算符“” 例如: #包括 名称空间MyNamespace { constexpr std::chrono::hours运算符“”\u hr(无符号长n){ 返回std::chrono::hours{n}; } //…命名空间中的其他内容。。。 } 使用MyNamespace::运算符“”;//不编译! int main() { 自动foo=37_小时; } 我的工作是将这些操作符放在它们自己的嵌套名称空间中,称为literals,这允许使用名称空间MyNames
运算符“”
例如:
#包括
名称空间MyNamespace
{
constexpr std::chrono::hours运算符“”\u hr(无符号长n){
返回std::chrono::hours{n};
}
//…命名空间中的其他内容。。。
}
使用MyNamespace::运算符“”;//不编译!
int main()
{
自动foo=37_小时;
}
我的工作是将这些操作符放在它们自己的嵌套名称空间中,称为literals
,这允许使用名称空间MyNamespace::literals
,但这似乎有点不雅观,我不明白为什么using
指令不能用于操作符
函数,就像它可以用于命名空间中的任何其他函数或类型一样
using MyNamespace::operator""_hr;
// ^^^
语法参考:
使用MyNamespace::operator“”\u hr代码>@PiotrSkotnicki这就是答案,我的朋友。(即使回答正确!)因此,用户定义的字符串文字
是对应于“\u hr
?@KyleStrand是的,用户定义的字符串文字
与字符串文字标识符
相同,分别是”
和\u hr
using MyNamespace::operator""_hr;
// ^^^
using-declaration:
using typename (opt) nested-name-specifier unqualified-id ;
using :: unqualified-id ;
unqualified-id:
identifier
operator-function-id
conversion-function-id
literal-operator-id
~ class-name
~ decltype-specifier
template-id
literal-operator-id:
operator string-literal identifier
operator user-defined-string-literal