Değişkenler
const değişken derleme esnasında ilklendirilebilir. Şöyle yaparız.
Örnek
Şöyle yaparız.
Şu kod hatalı.
Constructor içinde değer atanabilir. Açıklaması şöyle.
Metodlarda referans yoksa const olup olmaması fark etmeyebilir. Açıklaması şöyle.
Örnek
Şu iki metod aynıdır
Şu kod derlenir.
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 AlanConstructor içinde değer atanabilir. Açıklaması şöyle.
Şöyle yaparız. Çıktı olarak 555 alırız.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.
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 qualifierMetodlarda 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.
Şu iki metod aynıdır
void f(const T arg);
vevoid f(T arg);
Şu iki kod ise farklıdırvoid f(const T& arg);
vevoid 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