最新草案§8.5.3/5第(5.2.3/5)段(5.2.2.1)中的"user-defined conversions are not considered"是什么意思?
What does the Standard mean by "user-defined conversions are not considered", in bullet point (5.2.2.1) in paragraph §8.5.3/5 of the latest draft?
§8.5.3[dcl.init.ref]/5 项目符号 (5.2.2.1):
重点是我的
如果 T1 或 T2是类类型,并且 T1 与 T2 无关, 用户定义的转换使用用户定义的类型为"cv1 T1"的对象进行复制初始化的规则来考虑 转换(8.5、13.3.1.4、13.3.1.5);如果 相应的非引用复制初始化将格式不正确。 调用转换函数的结果,如 非引用复制初始化,然后用于 直接初始化引用。对于此直接初始化, 不考虑用户定义的转换。
这是该标准的附录,旨在解决通过间接引用绑定具有用户定义转换的类来丢弃 cv 限定符的问题。
相关的缺陷是1571。
给出的例子是这样的:
class A {
public:
operator volatile int &();
};
A a;
const int & ir1a = a.operator volatile int&(); // error!
const int & ir2a = a; // allowed! ir = a.operator volatile int&();
第一个引用初始化无效,因为它会丢弃初始值设定项表达式中的 cv 限定符。但是,在旧规则下,第二个是有效的,因为只考虑转换对象上的 cv 限定符,而不考虑转换运算符返回的引用的 cv 限定符。
我认为您的困惑源于两种可能的转换。考虑用户定义的转换以查看它们是否可以复制初始化cv1 T1
的非引用,然后使用该转换的结果直接初始化引用,不考虑用户定义的转换。
相关文章:
- OpenMP卸载说'fatal error: could not find accel/nvptx-none/mkoffload'
- 使用JsonCpp将数据返回到带有pybind11的python会在python调用中产生Symbol not foun
- OpenCV Android C++ imwrite not found
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 使用单词"not"作为C ++类的名称会导致VS2019错误
- 错误"Could not find Boost"(缺少:上下文标头)
- 如何修复"error: ‘_1’ was not declared in this scope"?
- 套接字连接"Operation not permitted"错误,甚至使用升压/平发器根.cpp
- Is !NaN not a NaN?
- 为什么我会" void value not ignored as it ought to be"?
- 解决"ld: library not found for -ltensorflow_framework.2.3.0"
- 加载与引用 .NET DLL 位于同一文件夹中的引用的 .NET DLL 时"Not found"异常
- Directx 11 - CompileFromFile() is not compiling
- 方法错误"not all control paths return a value"和方法不返回值
- Centos7 g++ "to_string is not in a member of std"
- 将系数存储在头文件的数组中("does not name a type"错误)
- QGraphicsItems not showing up QGraphicsScene
- 在调试模式下引发C++ "deque iterator not dereferencable"异常
- InitializeCriticalSectionEx Not Located In KERNEL32.Dll
- 最新草案§8.5.3/5第(5.2.3/5)段(5.2.2.1)中的"user-defined conversions are not considered"是什么意思?