繁体   English   中英

为什么我不能直接在临时对象上调用operator()?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM