【发布时间】:2015-01-26 06:27:03
【问题描述】:
我很惊讶地看到以下编译:
struct C {
operator C&&() {
std::cerr << "ref'd\n";
throw std::runtime_error("what is happening?");
}
};
一种类型,带有用于其自身的右值引用转换的运算符。但是,我无法使用我认为可以做到的方式调用操作员。将值传递给采用右值引用的函数失败,并且在对象上调用 std::move 不会触发任何事情。
为什么这段代码完全可以编译,有没有办法让这个函数真正运行?
clang 给出warning: conversion function converting 'C' to itself will never be used 有或没有类型上的引用。
【问题讨论】:
-
对于
operator C&(),铿锵声的结果相同。问题立场。 -
技术上不是不可调用的;您可以使用
C c; c.operator C&&();或获取成员函数指针C &&(C::*ptr)() = &C::operator C&&;并使用它。它不会在远程健全的代码中使用。 -
@Wintermute 另一个例外是虚拟调度。
-
@reymabel 哦,对。它甚至在您答案部分的脚注中都这么说。