鉴于所有这三个函数,这个调用是不明确的.
int f( int );
int f( int && );
int f( int const & );
int q = f( 3 );
Run Code Online (Sandbox Code Playgroud)
删除f( int )导致Clang和GCC更喜欢左值引用而不是左值引用.但是,删除任一引用过载都会导致模糊不清f( int ).
过载分辨率通常是根据严格的部分排序来完成的,但int似乎相当于两个彼此不相等的东西.这里的规则是什么?我似乎记得有关此问题的缺陷报告.
在未来的标准中是否有int &&可能优先考虑int?引用必须绑定到初始化程序,而对象类型不受约束.因此,在我之间超载T并且T &&可以有效地表示"如果我已获得所有权,则使用现有对象,否则复制".(这类似于纯通的价值,但移动节省的开销).由于这些编译器目前的工作,这必须通过重载来完成T const &和T &&,并明确复制.但我甚至不确定这是严格的标准.