c++ - 在不执行程序的情况下在 C++11 中检索 auto 的类型

标签 c++ c++11 static-analysis

我有一些使用 auto 推断类型的 C++11 代码,我必须将其转换为 C++98。我将如何转换代码,用实际类型替换 auto 的所有实例?

最佳答案

它将是一个 PITA,但您可以声明一个不完整的结构模板,接受单个类型参数。

给定变量 x 您想知道其类型,您可以将结构与 decltype(x) 一起使用,这将导致编译器错误,该错误将显示你是推断的类型。

例如:

template<class Type> struct S;

int main() {
    auto x = ...;
    S<decltype(x)>();
}

Live demo

这将产生如下形式的错误消息:

error: implicit instantiation of undefined template 'S<X>' (clang++)
error: invalid use of incomplete type 'struct S<X>' (g++)

其中 X 是推断的类型。在这种特殊情况下,类型是 int

琐事:这是 Scott Meyer 在最近的 NDC 2014 视频之一中推荐的(我不记得是哪一个)。

关于c++ - 在不执行程序的情况下在 C++11 中检索 auto 的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24441505/

相关文章:

c++ - 清除任意二维数组

c++ - 当我们需要存储 "the last n items"时,列表是否比 vector 更好?

c++ - 头文件未在 Linux 上的 Turbo C++ 中链接

C++11 表达式中的变量类型?

java - 在 IntelliJ IDEA 中,测试如何访问正在测试的代码的 PSI 树结构?

c++ - cppcheck: header 中的函数定义

c++ - 是否应该避免未命名的命名空间函数以减少符号表的大小?

multithreading - C++11 std::thread 接受带有右值参数的函数

c++ - 为什么原始指针没有 "weak pointer"?或者有吗?

去看 vert : catches inner but not outer race-condition