我有一些代码简化如下:
#include <iostream>
#include <string>
enum En
{
one,
two,
three
};
auto get_str(int n, En en)
{
if (n > 0)
{
return std::to_string(n);
}
switch (en)
{
case one:
return std::string("one");
case two:
return std::string("two");
case three:
return std::string("three");
}
}
int main()
{
auto str = get_str(3, two);
std::cout << str << '\n';
}
参见编译器资源管理器。
当我使用 GCC 14.2 或 13.3.0(带有或不带有-Wall -Wextra
)进行编译时,它会抱怨get_str
功能:
warning: control reaches end of non-void function [-Wreturn-type]
。
Clang 15.0 及以上版本-Wall -Wextra
不会发出任何警告。VS17.10 也会抱怨:warning C4715: 'get_str': not all control paths return a value
。
是什么导致 Clang 不同意?绕过 s 的路径是什么return
?