用户定义文字的作用域是什么
What is the scope of a user-defined literal?
考虑以下两个:
namespace X1
{
A operator "" _x(unsigned long long i) { return A{i}; }
};
namespace X2
{
B operator "" _x(unsigned long long i) { return B{i}; }
};
x
字面值定义了两次,但其中一个在namespace X1
中定义,另一个在namespace X2
中定义。
按照c++标准,可以编译这段代码吗?
用户定义的文字被视为对operator ""
X
(...)
的调用,其中 X
是一个标识符(例如,_x
), ...
取决于用户定义的文字的形式。然后,根据非限定查找的通常规则继续查找适当的用户定义文字操作符; [lex.ext] :
用户定义的literal被视为对文字操作符或文字操作符模板的调用(13.5.8)。为了确定给定的用户定义的文本L
具有 id -suffixX
的形式,使用非限定名称查找(3.4.1)的规则在L
的上下文中查找其文本后缀标识符X
的文字操作符id。[…]
_x
字面量的定义只有在通过using
或using namespace
声明或通过输入其中一个命名空间使两个定义可用于非限定查找时才会发生冲突;只有在实际调用了不合格的操作符时,冲突才会出现问题。
{ using namespace X1; auto o = 5_x; } // OK; o is of type A
{ using namespace X2; auto o = 5_x; } // OK; o is of type B
{ using namespace X1; using namespace X2; } // OK; operator "" _x is not used
{ using namespace X1; using namespace X2; auto o = 5_x; } // ambiguous
如果_x
是不同类型的用户定义的文字操作符,也可以,例如,如果一个是整数文字操作符,另一个是浮点文字操作符。
相关文章:
- "using namespace std;"在C++的作用是什么?
- 是同一作用域的函数部分中的函数调用
- atomic_thread_fence的作用域是什么
- 局部变量的作用域是块或函数
- 函数和类的作用域有什么区别
- 函数作用域是静态变量还是线程本地变量在C++11中的第一个条目中初始化
- 变量声明中结构的作用域解析是什么意思
- C++中没有大括号的for循环的作用域是什么
- 什么是C++中的作用域指针
- 此字符串的作用域是什么?
- C++11 Lambda闭包通过引用涉及一个堆栈变量,该变量离开作用域是允许的,但得到了未定义的行为
- C++中类内部的类的作用域是什么
- 用户定义文字的作用域是什么
- 文字值的作用域是什么,编译器如何为它分配内存
- 在c++模板中::*(作用域op后面的星号)是什么意思?
- 解析STD库作用域的路径是什么?
- 添加到QList中的c++类的作用域是什么?
- 在c++中,没有变量名的构造函数调用的生存期/作用域是什么?
- 在类定义的类名中,作用域解析操作符的作用是什么?
- 函数返回的unique_ptr的作用域是什么