正如问题所建议的那样,我正在尝试创建一个非常简单的通用打印函数,该函数试图包装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;
}
我在这里做什么错了?
答案 0 :(得分:2)
您是否启用了编译器警告?以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
,然后打印它,因此出现编译器警告。
但是,您不想创建新的局部变量,而是要打印传递的参数。
对于初学者来说有点高级,但是您的代码可以编译的原因是:Specifying function parameter type, but not variable。