[转]C++ 模板 静态成员 定义(实例化)

如果有这样一个模板:

对于以下若干种定义方式,哪些是对的(通过编译)?

为了不影响大家分析判断,我把答案颜色调成比较浅的颜色,下面即是答案:

首先,说明一下三个正确的答案。

第一种形式称之为特化定义,其作用是为模板某一特化提供其静态成员的定义,在我们例子中,它仅仅为Test

第 二种形式类似于普通类的静态成员的定义方式,其作用是隐式地在该编译单元为模板的所有特化提供其静态成员的定义,在我们例子中,在首次使用 Test

第三种形式和第二种形式一致,唯一不同就是采用默认构造函数初始化。

其次,说明一下三个错误的答案。

第一种形式,很多人都会认为是对的,认为它采用默认构造函数初始化。但编译器会对特化定义进行特殊处理,编译认为它是一个声明而非定义。至于为什么如此,应该询问一下制定标准的人。我认为可能实现这样的语法可能比较困难并且这个语法也比较鸡肋。

第二种形式,这不成了声明一个函数啦。

第三种形式,同第二种。

两种正确的定义方式还有哪些其他的区别呢?

这两个定义可以在不同的编译单元共存,Test

而特化定义,上述方式无法通过编译。

上述方式无法通过编译。

一般为了避免无法编译,应当尽量减少使用,如下方式的定义

template  string Test::info;

只有在你首次需要使用时在实现文件中给出如下特化定义即可,其他文件只要包含头文件就能使用。

template <> string Test::info("123");

Original: https://www.cnblogs.com/wlzy/p/10927343.html
Author: ZYVV
Title: [转]C++ 模板 静态成员 定义(实例化)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/535102/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Emacs中使用company + irony实现C++代码补全

    下面是主要配置,一些插件可能需要emacs版本 >= 25.1 对于Irony的话,需要在emacs中手动执行 M-x irony-install-server 来安装好ir…

    C++ 2023年5月29日
    042
  • 逆向初级-C++(三)

    1、什么是封装:将函数定义到结构体内部,就是封装。2、什么是类:带有函数的结构体,称为类。3、什么是成员函数:结构体里面的函数,称为成员函数。 #include #include …

    C++ 2023年5月29日
    059
  • C++ 内联函数解析(inline)

    inline是C++语言中的一个关键字,可以用于程序中定义内联函数,inline的引进使内联函数的定义更加简单。说到内联函数,这里给出比较常见的定义,内联函数是C++中的一种特殊函…

    C++ 2023年5月29日
    044
  • C++设计模式-工厂方法

    定义 定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法(Factory Method )使一个类的实例化延迟到其子类。也叫虚构造器(Virtual Construct…

    C++ 2023年5月29日
    039
  • C++/CLI

    【 C++/CLI】 A C++/CLI application or component uses extensions to C++ syntax (as allowed by…

    C++ 2023年5月29日
    066
  • C++ 11 关键字:thread_local(转)

    thread_local 是 C++ 11 新引入的一种存储类型,它会影响变量的存储周期。 C++ 中有 4 种存储周期: 有且只有 thread_local 关键字修饰的变量具有…

    C++ 2023年5月29日
    046
  • Model/View结构(整理自<Qt5.9 C++开发指南>)

    数据模型 数据不仅可以存储在数据模型中,数据可以是其他类,文件,数据库或任何数据源. 视图组件 那些带View的类; 在显示数据时,调用setModel()函数,为自己设置一个数据…

    C++ 2023年5月29日
    064
  • 29.qt quick-在QML中调用C++类

    Qt Quick文章已移植到CSDN博客:https://blog.csdn.net/qq_37997682/category_11280267.html,本博客停止更新。 专栏入…

    C++ 2023年5月29日
    059
  • 代朋友发招聘信息,C++程序员

    急招:高级C/C++程序员工作职能:1、开发工具(地图编辑,动作编辑器等)的维护及新版本的开发。2、Symbian、WM新游戏开发要求:1、精通C/C++语言;2、强烈的责任心和认…

    C++ 2023年5月29日
    051
  • 采用C++17新标准 “共享锁”和“独占锁”更低消耗更好性能地保护不常更新的共享数据

    用到的标准库: std::shared_lock<>、 std::shared_mutex、 std::lock_guard<>。 另外还有 std::sh…

    C++ 2023年5月29日
    062
  • c++ win32 遍历进程列表

    使用 CreateToolhelp32Snapshot #include #include #include #include int main() { HANDLE hSnap …

    C++ 2023年5月29日
    064
  • c++11 thread

    官方例子 // thread example #include // std::cout #include // std::thread #include using namesp…

    C++ 2023年5月29日
    070
  • C++深拷贝与浅拷贝

    对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=88;int b=a;而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝…

    C++ 2023年5月29日
    035
  • C/C++中 sizeof 详解

    Sizeof的作用非常简单:求对象或者类型的大小。然而sizeof又非常复杂,它涉及到很多特殊情况,本篇把这些情况分门别类,总结出了sizeof的10个特性: (0)sizeof是…

    C++ 2023年5月29日
    057
  • [c++] 拷贝构造函数

    拷贝构造函数就是进行对象拷贝复制的函数。 拷贝构造函数也是一种构造函数。它用同类型的对象来初始化新创建的对象。其唯一的形参是const类型&,此函数也由系统自动调用。 拷贝…

    C++ 2023年5月29日
    051
  • 【C++】自绘控件基础

    由于我们对控件的功能、外观的需求,公共控件并不能很好地满足这一点,所以我们就得自绘控件。 自绘控件有许多方法,比如: 处理WM_PAINT消息, 设置ownDraw风格,处理WM_…

    C++ 2023年5月29日
    032
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球