Я смущен о расширении этого шаблона [пример один]. Если bool b проверяется во время выполнения в конструкторе, где хранится b? он помещается в секцию частных данных [пример два]? или он становится временем компиляции и удаляет разветвленную на основе bool? или это просто "вставить", что было принято в качестве аргумента шаблона в, если (б) [пример 3]Как расширяются аргументы шаблона
Пример один:
template<bool b>
class Test
{
public:
Test()
{
if(b)
{
// do something
}
else
{
// do something else
}
}
};
Пример два:
class Test
{
public:
Test()
{
if(b)
{
// do something
}
else
{
// do something else
}
}
private:
bool b = true;
};
примера три :
//called with Test<true>
class Test
{
public:
Test()
{
if(true)
{
// do something
}
else
{
// do something else - probably removed due too compiler optimization
}
}
};