关于模板元编程

2021-01-25 11:11:11 +08:00
 QBugHunter
template<int x , int y>
void printInfo();

template<int x , int y>
void printInfo(){
    std::cout<<(x + y);
}

//----
printInfo<1,2>();

对于这样一个函数调用,x+y 是在编译器计算的,还是在运行期间计算的?

1600 次点击
所在节点    C++
6 条回复
fengjianxinghun
2021-01-25 11:18:07 +08:00
1. 这算不上元编程。
2. x+y 开优化的情况是编译期,常量传播。
no1xsyzy
2021-01-25 12:21:21 +08:00
gcc 10.2 -O0 也是编译期完成计算 https://godbolt.org/z/3dbYhW
开优化会 inline (但不确定是否必然 inline )

但考虑到 + 可以被重载,这应当被视为 int 特性而不是模板特性。

顺便来点诡异的: https://godbolt.org/z/xrrcqv
auto8888
2021-01-25 13:39:34 +08:00
@no1xsyzy 我去,大佬路子好野
James369
2021-01-26 10:02:36 +08:00
你的代码怎么格式化的这么漂亮,怎么发贴含代码的?
QBugHunter
2021-01-26 15:22:42 +08:00
@James369
mark down 语法。。。。。
James369
2021-01-26 15:41:44 +08:00
@QBugHunter 好的,谢谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/748081

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX