gpt4 book ai didi

c++ - C++ 模板中的段错误

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:15:37 24 4
gpt4 key购买 nike

我有一个关于 C++ 模板的问题。以下代码段错误。

template <typename T1, typename T2>
inline T1 const& max(T1 const &a, T2 const &b) {
return a < b ? b : a;
}
int main() {
std::cout << max(4.9, 4) << std::endl;
}

但是,删除 & 并且它做正确的事情。

template<typename T1, typename T2>
inline T1 const max(T1 const &a, T2 const &b) {
return a < b ? b : a;
}
int main() {
std::cout << max(4.9, 4) << std::endl;
}

此外,只需使用 T 而不是 T1 和 T2,它就可以正常工作。

template<typename T>
inline T const& max(T const &a, T const &b) {
return a < b ? b : a;
}

int main() {
std::cout << max(4, 5) << std::endl;
}

我在这里做错了什么?

最佳答案

您应该始终在打开警告的情况下进行编译,请参阅 https://wandbox.org/permlink/KkhFOJw6QNJ7rv7J .如果你有警告标志,编译器会帮助你并告诉你你做错了什么。

这里发生的是一个提升(参见 Return type of '?:' (ternary conditional operator)),您正在对 intdouble 执行三元表达式。这样做会导致临时提升 double。返回对临时对象的引用并在其生命周期绑定(bind)的函数返回后引用它是未定义的行为。

关于c++ - C++ 模板中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45873678/

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