Сообщение Re: Локальные переменные от 17.08.2025 8:58
Изменено 17.08.2025 9:02 rg45
Re: Локальные переменные
Здравствуйте, LaptevVV, Вы писали:
LVV>Вопрос: в с++20 локальные переменные стали зануляться по стандарту ?
LVV>Помнится вроде в clang они давно занулялись.
LVV>Сейчас стали обнуляться и в gcc.
LVV>В n4868 в 9.4 написано только
LVV>To zero-initialize an object or reference of type T means:
LVV>(6.1) — if T is a scalar type (6.8), the object is initialized to the value obtained by converting the integer literal 0 (zero) to T;
LVV>Относится ли это к локальным переменным — непонятно.
В этом пункте расписано, что из себя представляет zero-initialization, а не когда она применяется. А чтоб отследить, когда она применяется, там нужно отслеживать целую цепочку пунктов, и заканчивается эта цепочка вот здесь: https://timsong-cpp.github.io/cppwp/dcl.init.general#7.4
Как подкрепление сказанному, практический пример (С++26):
http://coliru.stacked-crooked.com/a/2b259fe0bb7256ac
А то, что в каком-то конкретном случае неинициализированная переменная содержит нули, следует списать просто на стечение остоятельсв, я думаю.
LVV>Вопрос: в с++20 локальные переменные стали зануляться по стандарту ?
LVV>Помнится вроде в clang они давно занулялись.
LVV>Сейчас стали обнуляться и в gcc.
LVV>В n4868 в 9.4 написано только
LVV>To zero-initialize an object or reference of type T means:
LVV>(6.1) — if T is a scalar type (6.8), the object is initialized to the value obtained by converting the integer literal 0 (zero) to T;
LVV>Относится ли это к локальным переменным — непонятно.
В этом пункте расписано, что из себя представляет zero-initialization, а не когда она применяется. А чтоб отследить, когда она применяется, там нужно отслеживать целую цепочку пунктов, и заканчивается эта цепочка вот здесь: https://timsong-cpp.github.io/cppwp/dcl.init.general#7.4
(7.3) — Otherwise, no initialization is performed.
Как подкрепление сказанному, практический пример (С++26):
http://coliru.stacked-crooked.com/a/2b259fe0bb7256ac
#include <iostream>
int x;
int main() {
int y;
std::cout << x << std::endl; // OK
std::cout << y << std::endl; // warning: 'y' is used uninitialized [-Wuninitialized]
}
А то, что в каком-то конкретном случае неинициализированная переменная содержит нули, следует списать просто на стечение остоятельсв, я думаю.
Re: Локальные переменные
Здравствуйте, LaptevVV, Вы писали:
LVV>Вопрос: в с++20 локальные переменные стали зануляться по стандарту ?
LVV>Помнится вроде в clang они давно занулялись.
LVV>Сейчас стали обнуляться и в gcc.
LVV>В n4868 в 9.4 написано только
LVV>To zero-initialize an object or reference of type T means:
LVV>(6.1) — if T is a scalar type (6.8), the object is initialized to the value obtained by converting the integer literal 0 (zero) to T;
LVV>Относится ли это к локальным переменным — непонятно.
В этом пункте расписано, что из себя представляет zero-initialization, а не когда она применяется. А чтоб отследить использование, там нужно отслеживать целую цепочку пунктов, и заканчивается эта цепочка вот здесь: https://timsong-cpp.github.io/cppwp/dcl.init.general#7.4
А то, что в каком-то конкретном случае неинициализированная переменная содержит нули, следует списать просто на стечение обстоятельсв, я думаю.
Как подкрепление сказанному, практический пример (С++26):
http://coliru.stacked-crooked.com/a/2b259fe0bb7256ac
LVV>Вопрос: в с++20 локальные переменные стали зануляться по стандарту ?
LVV>Помнится вроде в clang они давно занулялись.
LVV>Сейчас стали обнуляться и в gcc.
LVV>В n4868 в 9.4 написано только
LVV>To zero-initialize an object or reference of type T means:
LVV>(6.1) — if T is a scalar type (6.8), the object is initialized to the value obtained by converting the integer literal 0 (zero) to T;
LVV>Относится ли это к локальным переменным — непонятно.
В этом пункте расписано, что из себя представляет zero-initialization, а не когда она применяется. А чтоб отследить использование, там нужно отслеживать целую цепочку пунктов, и заканчивается эта цепочка вот здесь: https://timsong-cpp.github.io/cppwp/dcl.init.general#7.4
(7.3) — Otherwise, no initialization is performed.
А то, что в каком-то конкретном случае неинициализированная переменная содержит нули, следует списать просто на стечение обстоятельсв, я думаю.
Как подкрепление сказанному, практический пример (С++26):
http://coliru.stacked-crooked.com/a/2b259fe0bb7256ac
#include <iostream>
int x;
int main() {
int y;
std::cout << x << std::endl; // OK
std::cout << y << std::endl; // warning: 'y' is used uninitialized [-Wuninitialized]
}