Когда строится объект стека в вызове функции?

Скажем, у меня есть простая функция:

void foo(int val) {
if(val == 0) {
return;
}
else {
stringstream ss;
ss << "Hello World" << endl << ends;
cout << ss.str();
}
}

Если я вызываю функцию с val == 0строится ли когда-либо объект stringstream ss? Я подозреваю, что нет, но просто хочу подтвердить.

4

Решение

Именно так полезны области видимости в C / C ++: не создавать объекты, которые вы не хотите создавать.

Здесь ваш stringstream Объект должен быть построен только в том случае, если вы проникаете в его область, определенную else фигурные скобки.

Так что нет, ваш объект не будет построен, если val == 0,

4

Другие решения

Нет. Вы можете легко подтвердить это, используя вместо этого собственный объект и помещая что-то в конструктор. Например:

class TestClass {
public:
TestClass() { cout << "Construct TestClass" << endl; };
};

void foo(int val) {
if(val == 0) {
return;
}
else {
TestClass myTest;
cout << "In else" << endl;
}
}
6

Поскольку программа не будет работать до этого момента, этот поток строк не будет создан.

1
По вопросам рекламы [email protected]