相关疑难解决方法(0)

这是错误的警告吗?

让我们看看这个我经常看到的代码模式:

struct Foo
{
    template <typename T>
    T* as1() { /* ... */ }

    template <typename T>
    T* as2(T*) { /* ... */ }  
};   
Run Code Online (Sandbox Code Playgroud)

前一种方法是这样使用的:

    SomeComplexTypeAndNotAuto * a = foo.as1<SomeComplexTypeAndNotAuto>();
Run Code Online (Sandbox Code Playgroud)

而后者使用起来更方便,因为您不需要重复复杂类型:

    SomeComplexTypeAndNotAuto * a = foo.as2(a); 
Run Code Online (Sandbox Code Playgroud)

但是,大多数编译器会通过 Wuninitialized 警告拒绝第二种情况:

warning: variable 'a' is uninitialized when used within its own initialization [-Wuninitialized]
Run Code Online (Sandbox Code Playgroud)

很明显,变量没有在初始化中使用,只有它的类型。有没有办法在不处理每个编译器 pragma 的地狱的情况下避免此警告?

编辑:

从我最初的帖子中不清楚,但是当我写 时SomeComplexTypeNotAuto,我的意思是这样的代码: auto a = foo.as2(a);无法解析,因为您必须提供一种类型以允许编译器推断它。

我的问题是特定于 methodas2()是一个模板这一事实,因此必须在 type 的专业化时间可见T。因此编译器可以看到该参数T*甚至没有名称,因此它不能在函数内使用/可用。因此,我不明白为什么它会警告“未使用的变量”警告,因为很明显它没有被使用。

c++ templates warnings design-patterns initialization

4
推荐指数
1
解决办法
79
查看次数