我想做的事情可归纳为以下代码:
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);
,所以你的代码试图初始化B
与int
.
要解决此问题,您可以使用C++ 11的统一初始化:
B{a}(2);