gpt4 book ai didi

c++ - decltype(std) 是否合法,是否有任何用途?

转载 作者:可可西里 更新时间:2023-11-01 16:34:25 25 4
gpt4 key购买 nike

当在命名空间周围使用 decltype 时,我可以编写编译代码,但该语句在 g++4.9.1 下似乎没有任何效果,在 clang 下它生成 错误:意外的命名空间名称“std”:预期的表达式

例如,以下所有代码都在 g++ 下编译,但程序集不显示为它们生成的任何代码。

using s = decltype(std);
auto n = typeid(decltype(std)).name();
auto sz = n.size();
std::printf("size is %zu\n", sz+1);
std::printf("this type is: %s\n\n", n.c_str());

// the only limit is your imagination
int f();
std::ostream trash = f(typeid(decltype(std)) * 10 - 6 ^ typeid(decltype(std)));

如果 g++ 允许这样做是正确的吗?如果是这样,代码消失而不是导致编译时错误的优势是什么?

最佳答案

不,这是不合法的。语法允许的两种 decltype-specifier 形式是(N3690,§7.1.6.2/1):

decltype-specifier:
decltype ( expression )
decltype ( auto )

并且命名空间名称不是表达式。

我引用的段落来自 C++11 后的标准草案,因此 decltype(auto) 不适用于 C++11。不过答案是一样的。

关于c++ - decltype(std) 是否合法,是否有任何用途?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26124547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com