我想创建一个常量对象的临时副本,并以非常量方式使用它:
struct S {
S& f() { return *this; }
};
int main() {
const S a{};
S{a}.f(); // Error on this line
return 0;
}
使用msvc(Visual Studio 2017,C++14),我遇到了以下错误:
错误 C2662 “S &S::f(void)”:无法将“this”指针从“const S”转换为“S&”
如果我把花括号初始化改成经典的初始化方式,它就可以工作了:
S{a}.f(); // Does not work
S(a).f(); // Works
这两个变体在gcc中都可以编译通过。我是不是漏掉了什么,还是这是一个编译器的错误?