使用typeid警告未使用的变量

时间:2018-10-29 14:03:58

标签: c++ templates language-lawyer

我为typeinfo写了一个小包装,以便在编译时更轻松地获取变量的类型代码:

template<typename DataType>
class TypeInfo
{
public:
    static const char* typecode()
    {
        DataType TypedVariable = 0;
        const char* code = typeid(TypedVariable).name(); 
        return(code);
    };
};

我这样使用它:

const char* code = TypeInfo<float>::typecode();

它可以很好地编译并且可以按预期工作,但是我得到警告了

src/common.hh(153): warning: variable "TypedVariable" was set but never used
          detected during:
            instantiation of "char TypeInfo<DataType>::typecode() [with DataType=r32]"
...

我想知道为什么在变量上“调用” typeid()不算作使用它。我知道这是一个已定义的关键字,但仍然让我感到恼火的是,获取变量的类型并不算作使用它。 使用CUDA 9.2的nvcc完成编译。也许是CUDA特有的东西?

感谢您的帮助:)

//编辑: 我由于不返回完整的char *而犯了一个错误,因为我仅使用普通类型!感谢您让我知道错字!我还添加了模板定义。我忘了抄过来!

1 个答案:

答案 0 :(得分:2)

因为您没有使用TypedVariable。您只需使用它的类型(就可以通过将初始化重写为以下方式来获得它的类型:

        char const * const code = typeid(DataType).name();