Przesłanianie zmiennych w konstruktorze na etapie inicjalizacji obiektu.

0

Mam pytanie, czy takie coś niesie za sobą jakieś nieokreślone zachowanie w pewnych szczególnych sytuacjach? Domyślam się, że dobrą praktyką jest tak nie robić ale poza tym?

#include <iostream>

struct Foo{
	Foo(int a, int b) : a(a), b(b){
		
	}    
	
	int a {};
	int b {};
};

int main (){
 
    Foo foo {1, 2};
    
    return 0;
}
0

Ja tam nie rozumiem.
Dobrą praktyką jest nie robienie czego?

0

Jak sobie dodamy opcję -Wshadow przy kompilacji to poleci nam ostrzeżenie.

http://melpon.org/wandbox/permlink/Iw6yCanbZCjTtzkU

O ile rozumiem, że jeżeli mamy jakąś metodę i w niej deklarujemy zmienną, a gdzieś dalej (cały czas w zakresie tej metody), robimy redeklarację tej zmiennej to przesłaniamy sobie tą wcześniejszą i to może powodować niechciane skutki to zastanawia mnie jak to jest w przypadku tworzenia obiektu, mamy zmienną "a" jako parametr konstruktora i jednocześnie mamy tak samo nazwane pole w klasie.

0

Ten przypadek jest całkowicie ok: http://stackoverflow.com/a/6185043
Podejrzewam, że flaga shadow jest trochę nadgorliwa, albo niedostatecznie inteligentna.

0

O to mi chodziło, dzięki za linka, poczytam sobie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1