int main()
{
std::cout << typeid("asd").name() << '\n';
std::cout << std::is_array_v<decltype("asd")> << '\n';
std::cout << std::is_pointer_v<decltype("asd")> << '\n';
}
在 Visual Studio 2019 输出:
char const [4]
0
0
GCC 也是一样。字符串字面量难道既不是数组也不是指针?
decl.type.simple/4:
expr.prim.literal/1
lex.string/8
只有对 id-expression 以及 prvalue ,
decltype(e)
才会直接返回e
的类型。否则,对 xvalue 返回 T&& ,对 lvalue 返回 T&。
"abs"
的类型是const char[4]
,lvalue它既不是 id-expression 也不是 xvalue,所以
decltype("abc")
会得到const char(&)[4]