這個問題在這里已經有了答案: 模板函式中使用的靜態變數 3 個答案 昨天關門。
我想在接受可變數量引數static的函式中使用變數。variadic template由于函式被遞回呼叫,我希望i每次呼叫的值都會增加。但是靜態變數只增加一次,而不是每次函式呼叫。這是演示此行為的程式。
#include <iostream>
#include <string>
using namespace std::string_literals;
void printArgs() {}
template<typename T, typename... Ts>
void printArgs(T first, Ts... rest)
{
static int32_t i{};
i;
std::cout << i << ". " << first << std::endl;
printArgs(rest...);
}
int main()
{
printArgs("hello cpp"s, "c 11", 'x', 1234, 0xab45, 0b010101);
}
輸出
1. hello cpp
1. c 11
1. x
1. 1234
1. 43845
1. 21
如果我通過將靜態變數移到函式定義之外來使其成為全域變數,則它會在每次函式呼叫時遞增。
static int32_t i{};
template<typename T, typename... Ts>
void printArgs(T first, Ts... rest)
{
i;
std::cout << i << ". " << first << std::endl;
printArgs(rest...);
}
輸出
1. hello cpp
2. c 11
3. x
4. 1234
5. 43845
6. 21
可變引數模板函式在這種情況下如何表現?編譯器是否為每個函式呼叫創建一個單獨的函式?
uj5u.com熱心網友回復:
函式的每個特化都有自己的靜態變數副本。
編譯器是否為每個函式呼叫創建一個單獨的函式?
相反,對于每組使用的模板引數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/495650.html
上一篇:如何從飛鏢的嵌套串列中提取專案
