gpt4 book ai didi

c++ - 为什么 clang 不警告模板中的死代码?

转载 作者:行者123 更新时间:2023-11-30 03:43:06 25 4
gpt4 key购买 nike

用-Weverything 编译时,为什么clang 不在下面的模板中标记死代码,而是在函数中标记它?请注意,在这两种情况下,它都会标记未使用的变量警告。

#include <iostream>

template <class Item> class ItemBase {
public:
bool performWork() {
int i;
std::cout << "foo" << std::endl;
return true;
std::cout << "dead code in template" << std::endl;
}
};

bool badFunc();
bool badFunc() {
int i;
std::cout << "foo" << std::endl;
return true;
std::cout << "dead code in function" << std::endl;
}

int main() {
ItemBase<float> tester;
tester.performWork();

badFunc();
}

clang 输出:

test.cpp:24:13: warning: unused variable 'i' [-Wunused-variable]
int i;
^
test.cpp:33:9: warning: unused variable 'i' [-Wunused-variable]
int i;
^
test.cpp:36:42: warning: code will never be executed [-Wunreachable-code]
std::cout << "dead code in function" << std::endl;
^~
3 warnings generated.

最佳答案

我看不出有任何理由不发出该警告(除了 clang 中的错误)。

我猜 clang 对模板中的警告过于谨慎,因为它无法判断代码将永远不会被模板的任何实例化执行(即使它很明显一个人),所以它只是不发出警告。但这只是一个假设。

关于c++ - 为什么 clang 不警告模板中的死代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36342093/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com