我想做的事情可以总结为以下代码:
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++会忽略括号,并将语句视为声明。
这是指定的或预期的行为吗?
我想做的事情可以总结为以下代码:
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
。B{a}(2);
(B(a))(2);
- Christian Hackl
f
重写为main
了。感谢你的建议。 - YiFei