是
auto x = initializer;
Run Code Online (Sandbox Code Playgroud)
相当于
decltype(initializer) x = initializer;
Run Code Online (Sandbox Code Playgroud)
要么
decltype((initializer)) x = initializer;
Run Code Online (Sandbox Code Playgroud)
还是两个?
我看到decltype(x)在宏中使用的x是一个变量名,因为在宏内部不知道对象的类型.
例如:
decltype(x) y = expr;
Run Code Online (Sandbox Code Playgroud)
我可以轻松使用auto而不是decltype.那么decltype变量类型声明需要哪些情况而不是auto?
我正在学习C++ 11中的"decltype".
"auto"和"decltype"的功能似乎重复,我不明白为什么我们需要"decltype".
根据维基,其主要用途是在通用编程中,通常很难甚至不可能表达依赖于模板参数的类型.
在通用编程中,当难以表达类型时,我可以使用"auto":
template <typename T>
void MakeAnObject (const T& builder)
{
auto val = builder.MakeObject();
// do stuff with val
}
Run Code Online (Sandbox Code Playgroud)
我不明白为什么需要"decltype".
"decltype"可以做"自动"不能做的事情吗?
提前致谢.
由于auto和decltype都用于推断类型.我以为他们会一样的.
但是,这个问题的答案表明不然.
我仍然认为他们不可能完全不同.我可以想到一个简单的例子,其中i两种情况下的类型相同.
auto i = 10; and decltype(10) i = 10;
Run Code Online (Sandbox Code Playgroud)
那么auto和decltype行为相同的可能情况是什么呢?