8 Kasım 2019 Cuma

const Anahtar Kelimesi

Değişkenler
const değişken derleme esnasında ilklendirilebilir. Şöyle yaparız.
//case 0
int i0 = 5;
int j0 = i0;//no compil-time initialized
//case 1
const int i1=5; 
int j1=i1; //compil-time initialized
//case 2
extern const int i2=5; 
int j2=i2; //compile-time initialized
//case 3
extern const int i3; 
int j3=i3; //no compil-time initialization
//case 4
extern const int i4; 
int j4=i4; //no compil-time initialization
const int i4=5;
Const Reference
Örnek
Şöyle yaparız.
const auto& c = SomeClass{};

const auto& v = c.GetSomeVariable();
Örnek
Şu kod hatalı.
const auto& cc = []{
    const auto& c = SomeClass{};
    return c;
}();
Const Üye Alan
Constructor içinde değer atanabilir. Açıklaması şöyle.
If a member has a default member initializer and also appears in the member initialization list in a constructor, the default member initializer is ignored.
Şöyle yaparız. Çıktı olarak 555 alırız.
class A {
public:
  A(int b) :k(b) {}//second time
  const int k = 666;//first time
};

int main() {
  A a(555);
  cout << a.k << endl;
  return 0;
}
top level cv qualifier
Metodlarda referans yoksa const olup olmaması fark etmeyebilir. Açıklaması şöyle.
Parameter declarations that differ only in the presence or absence of const and/or volatile are equivalent. Only the const and volatile type-specifiers at the outermost level of the parameter type specification are ignored in this fashion; const and volatile type-specifiers buried within a parameter type specification are significant and can be used to distinguish overloaded function declarations.
Örnek
Şu iki metod aynıdır
void f(const T arg);
ve
void f(T arg);
Şu iki kod ise farklıdır
void f(const T& arg);
ve
void f(T& arg);
Örnek
Şu kod derlenir.
class A
{
 public:
    void f(const int i);
};
void A::f(int i)
{
    std::cout<<++i<<std::endl;
}
int main()
{
   A a;
   a.f(1);
}

Hiç yorum yok:

Yorum Gönder