if(blablabla) goto mmClean;
const size_t cSize2 = strlen(...);
std::wstring wc2(cSize2, L'#');
mmClean:
...
由于 mmClean 标记,编译器会抛出无法初始化 wc2 的错误。是的,我知道不应该使用 goto,但在我的情况下,当需要为“正确代码”重写很多内容时,它很少使用。无论如何,您如何指定 wc2 以使其不会引发错误?可以动态判断吗?cSize2 可以是正在进行的任何事情
if(blablabla) goto mmClean;
const size_t cSize2 = strlen(...);
std::wstring wc2(cSize2, L'#');
mmClean:
...
由于 mmClean 标记,编译器会抛出无法初始化 wc2 的错误。是的,我知道不应该使用 goto,但在我的情况下,当需要为“正确代码”重写很多内容时,它很少使用。无论如何,您如何指定 wc2 以使其不会引发错误?可以动态判断吗?cSize2 可以是正在进行的任何事情
所有变量声明都应由运算符括号分隔,从而限制它们的生命周期。我将尝试用一个例子来解释原因:程序正在运行,假设表达式blablabla为真,那么goto将跳过cSize2和wc2的声明和初始化。但是没有人阻止你在 mmClean 之后使用这些变量,除了编译器之外没有人阻止你做错事。解决方案是限制 cSize2 和 wc2 变量的生命周期:这将告诉编译器在 goto 标签之后你不会使用这些变量(如果你是,那么你有错误的函数设计)