【发布时间】:2018-10-26 01:20:06
【问题描述】:
#include <iostream>
struct A
{
void f() const &
{
std::cout << "A::f()&" << std::endl;
}
void f() const &&
{
std::cout << "A::f()&&" << std::endl;
}
};
struct B
{
void f() const &
{
std::cout << "B::f()&" << std::endl;
}
};
int main()
{
A{}.f();
B{}.f();
}
输出是:
A::f()&&
B::f()&
请注意,void B::f() const && 不存在。
对我来说,应该选择B 调用B::f、void B::f() const && 的临时对象,否则应该引发编译器错误。
为什么在这种情况下选择void B::f() const &?
【问题讨论】:
-
我认为这只是因为您根本没有
void f() const &&,C++ 似乎倾向于允许您编写更灵活的代码,而不是限制您手动进行微优化。这类似于在没有移动构造函数的情况下使用Object(const Object &)调用std::move(object)。
标签: c++ c++11 overloading rvalue-reference ref-qualifier