相关疑难解决方法(0)

C++静态成员变量及其初始化


对于C++类中的静态成员变量 - 初始化在类外部完成.我想知道为什么?对此有任何逻辑推理/约束吗?或者它是纯粹的遗留实现 - 标准不想纠正?

我认为在类中初始化更"直观"而且不那么混乱.它还给出了变量的静态和全局性.例如,如果您看到静态const成员.

c++ initialization static-variables

48
推荐指数
2
解决办法
5万
查看次数

使用静态变量和模板

我有一个像这样的头文件中定义的模板类.这里我也定义了一个静态变量:

#ifndef TEST1_H_
#define TEST1_H_

void f1();

static int count;

template <class T>
class MyClass
{
public:

    void f()
    {
        ++count;
    }


};

#endif
Run Code Online (Sandbox Code Playgroud)

我已经在不同的cpp文件中定义了main()函数,如下所示:

int main(int argc, char* argv[])
{
    MyClass<int> a;
    a.f();
    f1();

    cout<<"Main:" << count << "\n";

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我在不同的cpp文件中实现了函数f1(),如下所示:

void f1()
{
    MyClass<int> a;
    a.f();

    cout<<"F1: " <<count <<"\n";
}
Run Code Online (Sandbox Code Playgroud)

当我用VC6编译它时,输出为"F1:0 Main:2".这怎么可能?另外,一般情况下,如果我想将静态变量与模板一起使用,我应该如何处理?

c++ static templates visual-c++-6

18
推荐指数
1
解决办法
2万
查看次数

模板函数静态变量

我有一个模板函数,可以根据typename传递给它的参数给我一个唯一的 id,如下所示:

template<typename T>
inline std::size_t get_component_type_id() noexcept
{
    static_assert(std::is_base_of<Component, T>::value, "T must be of type Component.");

    static size_t uniqueComponentId{__INTERNAL__::getUniqueComponentId()};

    return uniqueComponentId;
}
Run Code Online (Sandbox Code Playgroud)

当我调用get_component_type_id10BaseClass次时,我得到相同的 id。效果很好。

但是,如果我将子类传递给该函数,我也想获得相同的 id。当我用 调用它时ChildClass,我得到一个不同的 id。这是为什么?

c++ templates

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