gpt4 book ai didi

c++ - 这个简单的 C++ 模板类有什么问题?

转载 作者:行者123 更新时间:2023-11-30 01:18:44 25 4
gpt4 key购买 nike

以下代码片段在头文件中:

// Represents NxN scalar values (aka square matrix).  
template<std::size_t N>
class dummy
{
public:
float& operator[](const std::size_t ind) { return scalars[ind]; }

private:
float scalars[N*N];
};

using dummy2 = dummy<2>;

这就是我使用它的方式:

// 2x2=4 floats
dummy2 d;

std::cout << d[0] << std::endl; // prints 0
std::cout << d[1] << std::endl; // prints 0
std::cout << d[2] << std::endl; // prints -1.42253e+19
std::cout << d[3] << std::endl; // prints 4.59163e-41

我的问题是为什么最后两次打印调用没有产生零值?

最佳答案

您没有为您的类提供构造函数,因此编译器生成一个默认构造函数,默认初始化该类的所有成员。默认初始化一个内置类型意味着它根本没有被初始化,所以对它的值的任何使用都是未定义的。换句话说,标量 没有初始化为任何东西。

你可以这样修复它:

template<std::size_t N>
class dummy
{
public:
float& operator[](const std::size_t ind) { return scalars[ind]; }

dummy() : scalars()
{}

private:
float scalars[N*N];
};

using dummy2 = dummy<2>;

这使得 scalars 值初始化而不是默认初始化,并且值初始化一个 float 将它设置为 0.f,所以一切都会好起来的。

Live example

关于c++ - 这个简单的 C++ 模板类有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22248452/

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