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是否不是该函数的局部变量?返回其引用不应该成功,不是吗?

最佳答案

编译器发出警告,表明您正在返回对局部变量的引用。

之所以起作用,是因为从函数返回对局部变量的引用是未定义行为
未定义的行为意味着任何事情都会发生,并且无法在C++标准的语义内解释该行为。

您只是很幸运,很不幸它起作用了。它可能并不总是有效。

07-24 13:17