gpt4 book ai didi

c++ - 为什么编译器在编译时无法理解 if 分支的值?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:08:15 25 4
gpt4 key购买 nike

我正在编写一个函数来计算多维 vector 的元素

template<class T>
int real_size(const std::vector<T>& vec)
{
int size=0;
for(const auto& v : vec)
{
if(std::is_integral<T>::value ||
std::is_floating_point<T>::value){
size+=1;
}
else{
size +=real_size(v);
}
}
return size;
}

int main()
{
std::vector<std::vector<int>> a(10);
a[0]=std::vector<int>(10);
std::cout<<real_size(a);
}

这给我这些错误:

 error: no matching function for call to 'real_size(const int&)'
size +=real_size(v);
^

该代码看起来很好,错误无关紧要...else 语句永远不应成为 size +=real_size(int); 因为我正在使用 std 检查模板参数的类型::is_integer .

但似乎编译器在编译时无法理解它!!是编译器错误还是我犯了错误?

*我使用的是 gcc 4.8.1。 g++ -std=c++11 *

最佳答案

如果将常量替换为它们的实际值,您可以看到编译错误是如何产生某种意义的。对于 int,该代码等同于以下内容:

    if(true || false){
size+=1;
}
else{
size +=real_size(v);
}

编译器在这里仍然会提示 else 主体无效:死代码必须仍然是有效代码。

关于c++ - 为什么编译器在编译时无法理解 if 分支的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24187694/

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