reinterpret_cast - zła zkonwertowana wartość

0

Kiedy stosuję stoi to wszystko jest ok ale kiedy zmienię na reinterpret_cast to x ma inną wartość i nie wiem dlaczego

void zapisz_do_pliku_part2(int n, int g) {
	ifstream zfile("samodopelniajace.txt");
	string word;
	int x;
	vector<TGraph> v(g);
	int i,j,k=0;
	if (zfile.is_open()) {
		for (k = 0; k < g; k++) 
			for (int i = 0; i < n; i++)
				for (int j = 0; j < n; j++)
				{
					zfile >> word;
					cout << "word:" << word << endl;
					x =reinterpret_cast<int>(&word);
					cout <<"x:"<< x<<endl;
					v[k].A[i][j] = x;
				}
		
		

	}
}
3

reinterpret_cast nie służy do konwersji. On tylko zmienia "postrzeganie" danych. Do stoi zapewne podajesz word, a nie &word. Pewnie dlatego, że reinterpret_cast<int>(word), które pierw spróbowałeś, się nie kompiluje, bo zupełnie nie ma sensu i język na to nie pozwala. Tak czy inaczej, dziwisz się, że różne wyrażenia mają różne wartości.

Skąd w ogóle pomysł użycia tutaj reinterpret_cast? Jeśli z książki/tutoriala to natychmiast zmień źródło nauki.

0

z wykładu xD

screenshot-20161231180029.png

screenshot-20161231180148.png

2

Ale to jest w miarę sensowne (teoretycznie uintptr_t zamiast long powinno być), adres jest liczbą (a rzutowanie jest implementation defined). Ty natomiast - z tego co zrozumiałem - chciałeś uzyskać konwersję wartości.

2

Bo wskaźnik (na większości platform) może być zrzutowany na liczbę, ale nie klasa. std::string jest klasą STLa. Kod, który masz z wykładu też nie jest poprawny, bo typy na które można rzutować wskaźniki to intptr_t lub uintptr_t, bo tylko one gwarantują, że będzie w nich dość miejsca na przechowanie takiego wskaźnika. Natomiast long int nie ma żadnych minimalnych ograniczeń co do rozmiaru oprócz tego, że musi być nie mniejszy niż int.

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