可能重复:
decltype 和括号
int i=6;
decltype((i)) var5 = i; // int&
我只是不明白为什么括号中的“i”被视为左值,现在,我知道括号的应用,直到我在 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())
。MSDN中关于decltype的内括号解释不适用于这种情况。有人可以告诉我,在 C++ 标准的这两种情况下,是否有关于括号函数的扩展。我该如何更好地理解这一点,非常感谢!