template <typename dataTypeA,
typename dataTypeB>
dataTypeB const& functionX (dataTypeA argA,
dataTypeB const& argB)
{
return argA;
}
int main ()
{
cout << functionX (3, 1L);
return 0;
}
汇编:
anisha@linux-dopx:~/Desktop/notes/c++> g++ functionTemplates.cpp -Wall -Wextra -pedantic
functionTemplates.cpp: In function ‘const dataTypeB& functionX(dataTypeA, const dataTypeB&) [with dataTypeA = int, dataTypeB = long int]’:
functionTemplates.cpp:47:26: instantiated from here
functionTemplates.cpp:35:9: warning: returning reference to temporary
然后:
anisha@linux-dopx:~/Desktop/notes/c++> ./a.out
3
为什么回归3?
该函数的argA
不是局部变量吗?返回它的引用不应该成功,不是吗?
答案 0 :(得分:5)
编译器发出警告,表示您正在返回对局部变量的引用。
它的作用是因为从函数返回对局部变量的引用是未定义的行为 未定义的行为意味着任何事情都可能发生,并且行为无法在C ++标准的语义中解释。
你只是幸运,相当不幸,它有效。它可能无法正常工作。
答案 1 :(得分:1)
您将返回对argA
副本的引用,因为它在您调用该函数时存在。当你从该函数返回时,该副本将被销毁,并且它所在的空间可以被其他东西合理地使用。
这与this question没什么区别,只是你使用的是引用而不是指针。