[英]Why can't I call operator() on temporary objects directly?
我想做的事情可归纳为以下代码:
struct A{};
struct B{
A& a;
B(A& a) noexcept : a(a){}
int operator()(int) {}
};
int main(){
A a;
B(a)(2);
}
和我的编译器(g++ 6)
拒绝代码抱怨a
阴影的参数。 但是,如果我尝试显式调用operator()
,它会按预期工作。
似乎g++
将忽略括号并将该语句视为声明。
这是指定的还是预期的行为?
这是那些icky解析规则之一,一次又一次地抓住你。 如你所知, B(a)(2);
实际上相当于B a(2);
,所以你的代码试图用int
初始化一个B
要解决此问题,您可以使用C ++ 11的统一初始化:
B{a}(2);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.