从模板创建通用打印函数,以打印基元数据类型变量的值



正如问题所暗示的那样,我正在尝试创建一个非常简单的通用打印函数,试图包装std::cout(糟糕!下面是我编写的代码。但是当我尝试使用它来打印变量的值时x似乎它给了我动态分配的____(我真的不知道该放什么,所以请随时填补这个空白!我的问题是,有人可以解释一下这种行为,为什么它没有按照应有的方式工作吗?

template <typename T>
void printValueOf(T)
{
T t;
std::cout << t << std::endl;
}
int main(int argc, char **argv)
{
int x = 12;
printValueOf(x);
return 0;
}

我在这里做错了什么?

是否启用了编译器警告?例如,使用 GCC 中的Wall标志,我得到了:

In function 'void printValueOf(T) [with T = int]':
warning: 't' is used uninitialized in this function [-Wuninitialized]
|     std::cout << t << std::endl;
~~~~~~~~~~^~~~

将您的函数更改为以下内容:

template <typename T>
void printValueOf(T t)
{
std::cout << t << std::endl;
}

其中您需要类型为T的类型名,名为T的名为t的参数,最终打印t

在发布的函数中,您忽略了该参数,仅提供其类型,然后创建了一个名为t的新局部变量。您没有初始化变量t,然后打印它,因此编译器警告。

但是,您不想创建新的局部变量,而是要打印传递的参数。


对于初学者来说有点高级,但您的代码可以编译的原因是:指定函数参数类型,但不指定变量。

最新更新