You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

非成员模板函数链接属性存疑:实验与外部结论、标准表述不一致

非成员模板函数实例化的链接属性疑问

我自行实验发现非成员模板函数的实例化似乎具有内部链接,但相关资料表明它应为外部链接。C++标准中应有明确规定,但我难以找到相关内容。

实验代码

source.hpp

// source.hpp

#pragma once

#include <iostream>

template<typename T>
void print_size() {
    std::cout << "Size: " << sizeof(T) << std::endl;
}

void call_print_size();

source.cpp

// source.cpp

#include "source.hpp"

void call_print_size() {
    return print_size<int>();
}

main.cpp

// main.cpp

#include "source.hpp"

int main() {
    print_size<int>();
    call_print_size();
}

编译命令

我使用VS2022开发者命令提示符中的MSVC编译:

cl main.cpp source.cpp /std:c++17 /EHsc

实验现象与疑问

按我的理解,这会在source.cpp和main.cpp中各生成一个print_size<int>的实例化定义,若其具有外部链接则会违反单定义规则,但程序运行正常。

内容的提问来源于stack exchange,提问作者maltebp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 19:42:23