Скажем, у меня есть простая функция:
void foo(int val) {
if(val == 0) {
return;
}
else {
stringstream ss;
ss << "Hello World" << endl << ends;
cout << ss.str();
}
}
Если я вызываю функцию с val == 0
строится ли когда-либо объект stringstream ss? Я подозреваю, что нет, но просто хочу подтвердить.
Именно так полезны области видимости в C / C ++: не создавать объекты, которые вы не хотите создавать.
Здесь ваш stringstream
Объект должен быть построен только в том случае, если вы проникаете в его область, определенную else
фигурные скобки.
Так что нет, ваш объект не будет построен, если val == 0
,
Нет. Вы можете легко подтвердить это, используя вместо этого собственный объект и помещая что-то в конструктор. Например:
class TestClass {
public:
TestClass() { cout << "Construct TestClass" << endl; };
};
void foo(int val) {
if(val == 0) {
return;
}
else {
TestClass myTest;
cout << "In else" << endl;
}
}
Поскольку программа не будет работать до этого момента, этот поток строк не будет создан.