Giriş
Açıklaması şöyle.
Örnek
Şöyle yaparız.
vector'ün döndürdüğü iterator int& veya const int& döner. Referans'ı kaldırmak için std::remove_reference() kullanılır. Şöyle yaparız
Aşağıdaki örnekte l-value değişken const reference olarak perfert forwarding'e uğruyor ve const reference const kabul edilmediği için sonuç 0 çıkıyor.
Açıklaması şöyle.
İlginç bir şekilde reference tipler const kabul edilmiyorlar.If T is a const-qualified type (that is, const, or const volatile), provides the member constant value equal true. For any other type, value is false.
Örnek
Şöyle yaparız.
std::cout << std::is_const<int>::value << '\n'; // false
std::cout << std::is_const<const int>::value << '\n'; // true
std::cout << std::is_const<const int*>::value << '\n'; // false
std::cout << std::is_const<int* const>::value << '\n'; // true
std::cout << std::is_const<const int&>::value << '\n'; // false
Örnekvector'ün döndürdüğü iterator int& veya const int& döner. Referans'ı kaldırmak için std::remove_reference() kullanılır. Şöyle yaparız
std::vector<int> vec{0};
for(auto it=vec.begin(); it!=vec.end(); ++it) {
std::cout << std::is_const<std::remove_reference<decltype(*it)>::type>::value;
}
for(auto it=vec.cbegin(); it!=vec.cend(); ++it) {
std::cout << std::is_const<std::remove_reference<decltype(*it)>::type>::value;
}
ÖrnekAşağıdaki örnekte l-value değişken const reference olarak perfert forwarding'e uğruyor ve const reference const kabul edilmediği için sonuç 0 çıkıyor.
#include <iostream>
#include <type_traits>
using namespace std;
template<class T>
void f(T&& t)
{
cout<<is_const<T>()<<endl;
//++t;
}
int main() {
const int i=0;
f(i);
return 0;
}