c++ - 如何从函数内部修改作用域变量?

标签 c++ function

这是在 C++ 中(Eclipse Mars,如果重要的话,编译器 MinGW)。假设我想根据一个字符将一个字符串拆分为两个字符串,并使用一个函数:

int strParse(const string& a) {
    // parse line read input
    int b = a.find("-");
    firstsplit = a.substr(0, b);
    secsplit = a.substr(b + 1);
    return 0;
}

但我想将 firstsplitsecsplit 定义为不是全局变量,而是在 main() 的范围内,它们是用过的。当它们在那里定义时,它们不能在函数中使用,但我需要函数来定义它们以便在 main 的一部分中使用。

最佳答案

您当然可以在 main() 中定义它们并通过引用传递它们。但这很草率。

如果您要分析这种情况,firstsplitsecsplit 就是您的函数所计算的。

因此,您的函数应该做的是返回这些值。这就是函数的全部意义所在:它计算一些东西,然后返回它。

一种方法是简单地返回一个 std::pair

std::pair<std::string, std::string> strParse(const string& a) { //parse line read input
    int b = a.find("-");
    std::string firstsplit = a.substr(0, b);
    std::string secsplit = a.substr(b + 1);
    return std::make_pair(firstsplit, secsplit);
}

但是如果您的函数可能还需要返回其他内容或其他替代结果(例如错误指示),这将导致更多的工作和更多的重写。

最灵活的方法是让函数返回一个类:

class parse_results {

public:

     std::string firstsplit;
     std::string secsplit;
};

parse_results strParse(const string& a) { //parse line read input
    parse_results ret;

    int b = a.find("-");
    ret.firstsplit = a.substr(0, b);
    ret.secsplit = a.substr(b + 1);
    return ret;
}

然后,如果您需要在此处返回任何类型的附加信息,只需将其添加到 parse_results 类即可。

关于c++ - 如何从函数内部修改作用域变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39308567/

相关文章:

C++ 访客模式 : Why should every derived visited implement Accept()?

c++ - 类成员值的合法或错误成员使用?

从两个选项中获取一个强制参数的 Python 函数

c - 将相同的结构成员分配给其他成员时,c 中的分配类型不兼容

javascript - setTimeout 不适用于我的 onclick 事件

c - 关于将指针集成到程序中的建议

c++ - 如何在标准构造函数之外设置 boost::uniform_int_distribution 的参数?

c++ - throw关键字的使用

python - 在 Python 中导入 C++ 共享对象时出现段错误

javascript - setTimeout() 与 setInterval()