为什么我可以编译带有2个返回的代码?

Fir*_*ien 1 c++ codeblocks compiler-warnings unreachable-code

由于我是从一个java岛上来的,我觉得为什么编译器不会警告无法访问的代码,例如:

int main(int argc, char** argV)
{

    std::list<int> lst = {1,2,3,4};

    return 0;



    std::cout << "Done!!!" << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的问题:

为什么我可以编译带有2个返回的代码?

我的编译器是gcc for c ++ 11,在Windows上,代码块

Sla*_*ica 5

我觉得为什么编译器不会在类似的东西中警告无法访问的代码

关于警告的gcc 文档中有很好的解释:

-Wunreachable码

如果编译器检测到永远不会执行代码,则发出警告.此选项用于在编译器检测到至少一行源代码永远不会被执行时发出警告,因为某些条件永远不会得到满足,或者因为它位于永不返回的过程之后.

即使存在可以执行部分​​受影响的行的情况,此选项也可能产生警告,因此在删除明显无法访问的代码时应小心.

例如,当内联函数时,警告可能意味着该行仅在函数的一个内联副本中不可访问.

此选项不是-Wall的一部分,因为在程序的调试版本中,通常会有大量代码检查程序的正常运行,并且希望无法访问,因为程序确实有效.无法访问代码的另一个常见用途是提供在编译时可选择的行为.

虽然g ++ 5.1.0即使启用了此选项也不会对此代码产生任何警告.