gpt4 book ai didi

c++ - 当代码编译正确时,你能确定所有模板类型都是正确的吗?

转载 作者:行者123 更新时间:2023-11-30 01:13:57 24 4
gpt4 key购买 nike

因为在 C++ 中,当您使用模板时,在实例化之前不会生成代码。编译器只会为实例化类型生成代码。这是否意味着当我的代码(使用模板)编译时,我可以确定没有类型冲突并且我的代码不会在运行时由于类型错误而崩溃?

如果没有,有人能给我一个模板代码编译成功但在运行时仍然崩溃的例子吗?

最佳答案

由于模板实例化会导致生成依赖于模板参数的代码,因此所需要的只是其中一个模板实例化导致产生“崩溃”的代码。

然后归结为您所说的“崩溃”是什么意思。如果“崩溃”包括抛出异常但未被程序捕获(因此调用 terminate()),则以下将编译但产生崩溃

  #include <stdexcept>
#include <vector>

struct foo
{
foo() {throw std::runtime_error("crash");};
};

int main()
{
std::vector<double> d(2); // okay, unless memory allocation fails
std::vector<foo> f(2); // will throw an exception
}

如果你的意思是代码可以表现出未定义的行为(这意味着任何事情都可能发生,但一个潜在的结果是程序异常终止)那么改变上面 foo 的构造函数以表现出未定义的行为。例如,取消引用 NULL 指针、除以零等。不保证会发生“崩溃”(这是未定义行为的本质),但在这种情况下很可能会发生。

关于c++ - 当代码编译正确时,你能确定所有模板类型都是正确的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30845190/

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