Возможный дубликат:
decltype и скобки
int i=6;
decltype((i)) var5 = i; // int&
я просто не понимал, почему «i» в круглых скобках рассматривается как Lvalue, теперь я знал применение круглых скобок, пока не обнаружил, что в MSDN: внутренние круглые скобки заставляют оператор оцениваться как выражение, а не как членский доступ.(http://msdn.microsoft.com/en-us/library/dd537655.aspx), и я также не понял вопрос, который я не понимал в течение длительного времени.
template<typename T>
class B
{
public:
B(T t){printf("B\n");}
};
template <typename T >
void ft(T t)
{
t.f();
}
int _tmain(int argc, _TCHAR* argv[])
{
B<A> b1(A()); //one function declaration, A() is regarded as fun-ptr, and b1 is a function
B<A> b2((A())); //A() is regarded as anonymous object.
return 0;
}
Почему A()
считается анонимным объектом, если его заключить в скобки как (A())
. объяснение decltype во внутренних скобках в MSDN не может применяться к этой ситуации. может ли кто-нибудь сказать мне, есть ли объяснение функции скобок в этих двух ситуациях в стандарте С++. Как я должен понять это лучше, очень ценю это!