为什么我不能直接在临时对象上调用 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++
会忽略括号,把语句当成声明。
这是指定的还是预期的行为?
这是那些时不时地抓住你的讨厌的解析规则之一。正如您所建议的,B(a)(2);
实际上等同于 B a(2);
,因此您的代码尝试使用 int
.
初始化 B
要解决此问题,您可以使用 C++11 的统一初始化:
B{a}(2);
我想做的事情可以概括为以下代码:
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++
会忽略括号,把语句当成声明。
这是指定的还是预期的行为?
这是那些时不时地抓住你的讨厌的解析规则之一。正如您所建议的,B(a)(2);
实际上等同于 B a(2);
,因此您的代码尝试使用 int
.
B
要解决此问题,您可以使用 C++11 的统一初始化:
B{a}(2);