Qt Creator:调试和发布模式下类模板的不同行为

时间:2017-12-07 09:38:10

标签: c++ qt templates build

我正在尝试专门化模板成员功能。问题是在Debug模式下调用方法的特化,但在Release中调用非专用函数。

例如,我有类模板和专门方法

template <typename T>
class SimpleClass
{
public:
    void doSomething(const T& arg)
    {
        std::cout << "doSomething(const T& arg)" << std::endl;
    }
};
template <>
void SimpleClass<double>::doSomething(const double& arg)
{
    std::cout << "doSomething(const double& arg)" << std::endl;
}

int main(int argc, char **argv)
{
    SimpleClass<double> obj;
    obj.doSomething(1);
    return 0;
}

我期待,该输出将"doSomething(const double& arg)"

所以在调试模式下我得到了它,但在Release中我得到了这个:"doSomething(const T& arg)"

我的问题是为什么代码会以这种方式运行,我该如何解决? 以防万一,我的.pro文件

TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
SOURCES += main.cpp \
    mathop.cpp
HEADERS += \
    mathop.h

编辑:我正在使用Qt 5.9.1

编辑:忘记#include <iostream>,然后再使用cout

1 个答案:

答案 0 :(得分:0)

当您使用整数作为参数调用doSomething()时,我想编译器只是想在这里找到任意匹配。我不能说为什么调试和发布版本的行为有所不同,但我希望它在调用中明确地使用浮点值时按预期工作:

obj.doSomething(1.0);