Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 这种循环方法会是个坏主意吗?_C++ - Fatal编程技术网

C++ 这种循环方法会是个坏主意吗?

C++ 这种循环方法会是个坏主意吗?,c++,C++,我正在构建一个html/xml切片器(将文本切割成一个有意义的块列表,如elementStart、plainText等,然后我可以使用它以OO方式构造元素) 我发现创建一个用于处理各种模式的逻辑sub很方便,主循环信息保存在类变量中,而sub做一些工作,然后根据遇到的数据将火炬传递给另一个。但我突然想到,这可能会导致一些问题(比如堆栈溢出?idk),因为从技术上讲,在整个过程完成之前,它不会退出任何一个sub。我的意思是:(在伪代码中) void plainLogic(){ //查找“您可能希望

我正在构建一个html/xml切片器(将文本切割成一个有意义的块列表,如elementStart、plainText等,然后我可以使用它以OO方式构造元素)

我发现创建一个用于处理各种模式的逻辑sub很方便,主循环信息保存在类变量中,而sub做一些工作,然后根据遇到的数据将火炬传递给另一个。但我突然想到,这可能会导致一些问题(比如堆栈溢出?idk),因为从技术上讲,在整个过程完成之前,它不会退出任何一个sub。我的意思是:(在伪代码中)

void plainLogic(){

//查找“您可能希望使用分派表,或查看状态机设计模式。您正在显示的特定函数仅用于编译器可以优化以不填充堆栈的函数。但是使用递归是编译器工程中非常常见的技术。这可能无法避免。如果您担心利用此漏洞,如果嵌套太深,可能会设置健全限制并拒绝输入。@5gon12eder编译器可以优化尾部调用,但不能保证它会优化尾部调用,如果不优化,堆栈溢出是一个真正的问题。在XML解析器中避免递归当然是可行的。我甚至认为这是一个好主意,特别是在递归的情况下将导致您设置不必要的深度限制。目前,我设置了一个类作用域状态值,而不是进入另一个子系统,所有子系统返回到一个主循环子系统,然后根据状态执行下一个子系统。每个状态之间有一个额外的switch语句更改,但不会对性能造成明显的影响曼斯。
void plainLogic() {
    // look for '<' with something other than space after it
    // add the gathered data to the slice list
    switch (data[it])  // <- the something other
    {
        case '!':
            commentLogic();
            break;
        case '/':
            elEndLogic();   
            break;
        default:
            elStartLogic();
            break;
    }         
}