3
template <typename T> void g(T &&val);
int i = 0; const int ci = i;
g(i = ci);
什麼是g
模板參數?
template <typename T> void g(T &&val);
int i = 0; const int ci = i;
g(i = ci);
什麼是g
模板參數?
作爲每§5.18/ 1:
賦值運算符(=)和化合物賦值運算符的所有組從右到左。所有需要一個可修改的左值作爲它們的左操作數並返回一個左值指向左操作數。 [...]
所以,在
g(i = ci)
左操作,i
,則返回,因此T
被推斷爲int&
。
您可以通過這個片段檢查:
#include <type_traits>
template <typename T>
void g(T &&val) {
static_assert(std::is_same<T, int&>::value, "Nope");
}
int main() {
int i = 0; const int ci = i;
g(i = ci);
}