【发布时间】:2021-07-20 14:19:06
【问题描述】:
当我开始对 C++1x 特性进行更深入的试验时,我遇到了一些想法。例如当有这个构造时
template<unsigned int N> unsigned int functionForTest(const char (&a)[N]);
以及它的用法
functionForTest("Hello"); ---> const char [6]
functionForTest("Hello World") ---> const char [12];
然后 c++ 最终会用 2 个不同的参数类型实例化 2 个函数,这意味着如果此函数以不同的大小使用,则二进制大小会增加。那效率如何?它是编译器特定的吗?传统的类 C 数组和大小传递函数在这里不是更有效吗?
这就是我构建g++ -std=c++17 -Xlinker -Map=output.map compilerDiffs.cpp -o test.exe 的方式,这是为了得出这个结论而检查的地图文件样本
地图文件样本
【问题讨论】:
-
如果您愿意,可以使用 string_view。
-
请不要张贴文字图片,谢谢。函数模板实例化通常会导致生成二进制代码。这可能会导致二进制大小增加。在许多个月前将模板引入 C++ 时就是这种情况,并且在可预见的将来很可能会继续这种情况。至于效率,您需要衡量它在您的特定情况下的效率。 (但不要测量未经编译器优化生成的二进制文件)
标签: c++ pointers c++17 map-files template-instantiation