我有以下代码.
#include <iostream>
int * foo()
{
int a = 5;
return &a;
}
int main()
{
int* p = foo();
std::cout << *p;
*p = 8;
std::cout << *p;
}
Run Code Online (Sandbox Code Playgroud)
而代码只是运行而没有运行时异常!
输出是 58
怎么会这样?本地变量的内存不能在其功能之外无法访问吗?
在C++ Primer Plus(2001,捷克语翻译)中,我发现了这些不同的模板特化语法:
功能模板
template <typename T> void foo(T);
Run Code Online (Sandbox Code Playgroud)
专业化语法
void foo(int param); // 1
void foo<int>(int param); // 2
template <> void foo<int>(int param); // 3
template <> void foo(int param); // 4
template void foo(int param); // 5
Run Code Online (Sandbox Code Playgroud)
谷歌搜索了一下,我发现只有3号例子.它们之间是否存在差异(通话,编译,使用)?其中一些是否已过时/弃用?为什么不使用No.1?
我想知道以下是否安全:
template<class T>
void Parameters::add(Parameter<T> p)
{
std::string sprobe("");
int iprobe = 0;
double dprobe = 0.;
if (typeid(T) == typeid(sprobe))
this->mstrings[p.name()] = p;
if (typeid(T) == typeid(iprobe))
this->mints[p.name()] = p;
if (typeid(T) == typeid(dprobe))
this->mdoubles[p.name()] = p;
}
Run Code Online (Sandbox Code Playgroud)
我有一个用于存储参数的类.它有3个boost :: unordered_map成员变量,用于存储int,double和std :: string类型的参数;
我创建了一个模板类参数.
我知道如果我的参数不是我预期的3种类型中的一种,那么它将失败.但这不是问题,因为我知道参数只能是这些类型.
谢谢你的帮助