【问题标题】:error : expected primary-expression before 'decltype'错误:“decltype”之前的预期主表达式
【发布时间】:2019-09-23 22:23:53
【问题描述】:

我正在尝试查找变量的类型。在 stackoverflow 中提到 decltype() 用于此目的。但是当我尝试使用它时,它会抛出我在标题中提到的错误。

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int x = 4;
    cout << decltype(x);
    return 0;
}

我期待int,但它显示为错误。 error: expected primary-expression before 'decltype'

【问题讨论】:

  • 你也不能cout &lt;&lt; int;
  • 你的意思是typeid(x).name()
  • @chris 所以你的意思是 decltype() 不输出字符串。谢谢。
  • @LogicStuff 是的,我用过。但是在stackoverflow中的一些地方他们提到decltype比typeid().name更好

标签: c++ windows mingw


【解决方案1】:

类型不是一流的对象。您不能将类型传递给函数,cout &lt;&lt; decltype(x) 就是这样,将类型传递给函数(尽管被运算符美化了)。

要获取有关变量类型的信息,您可以

  1. 阅读代码。如果对象的类型是int,请不要打印它。
  2. 使用调试器单步执行您的程序。它显示了变量的类型。
  3. 使用这个(非标准)函数模板

    template <class T> void printType(const T&)
    {
        std::cout << __PRETTY_FUNCTION__ << "\n";
    }
    
    printType(x);
    
  4. 使用增强。

    #include <boost/type_index.hpp>
    
    std::cout << boost::typeindex::type_id_with_cvr<decltype(x)>().pretty_name() << "\n";
    

【讨论】:

  • 你好,如何获取boost模块?显然我的机器里没有它。是否有类似 C++ 的包管理器的“python pip”。我安装了柯南不知道接下来要做什么?
  • “是否有像 c++ 的包管理器一样的“python pip”” - 你不能问更复杂的问题 :) 无论如何,谷歌应该提供帮助。如果您遇到困难,请进行一些研究并发布一个新问题。
  • 大声笑.. 好吧...我会在测试您的代码后立即接受您的回答。感谢所有的帮助。
猜你喜欢
  • 2023-04-11
  • 2014-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-13
  • 2017-09-24
相关资源
最近更新 更多