发现了我不理解的奇怪行为:
std::vector<std::string> subdomainVisits(std::vector<std::string> &cpdomains)
{
// return std::vector<std::string>();
}
int main(int argc, char const *argv[])
{
std::vector<std::string> data = { "9001 discuss.leetcode.com" };
auto result = subdomainVisits(data);
return 0;
}
在这种情况下,subdomainVisits
函数中的注释return
会导致分段错误(使用 gcc 版本 7.3.0(Debian 7.3.0-19((。取消注释可以解决此问题。
为什么会这样?
编写的程序的行为是未定义的。
非void
函数必须在所有控制路径上具有显式返回值。
唯一的例外是main
,它有一个隐式return 0;
。
相当数量的编译器会警告您上述琐碎的情况。您是否没有将警告级别设置得足够高?(通过-Wall
和-Wextra
以"调高"gcc上的警告级别。
请注意,C++标准并不要求编译器编译失败:理论计算机科学(停止问题(告诉我们,可访问性是不可能证明的。