Конечно, экземпляр может узнать свое имя из метода класса:
#include <iostream>
class Foo {
public:
void Print() { std::cout << "Instance name = " << this << std::endl; }
};
int main() {
Foo a, b;
a.Print();
b.Print();
return 0;
}
будет производить вывод, подобный этому:
Instance name = 0x7fff502b8b48
Instance name = 0x7fff502b8b40
Что касается знания имени переменной, то это, конечно, невозможно. Существование объекта не означает существование переменной - этот экземпляр:
new Foo();
будет существовать до конца процесса, но никогда не будет связан ни с одной переменной. Языковая концепция переменных не отражается в содержимом указанных переменных, и любая потенциальная связь между языковой переменной и объектом выражается только в сгенерированном коде, а не в сгенерированных данных или метаданных. За исключением, конечно, доступа к отладочной информации, которая, как уже отмечалось, не является частью языка.
person
Leon
schedule
25.08.2015
Foo bar[200]
. Какое имя экземпляра должно быть дляbar[13]
? Или даже прозаично, пустьnew Foo()
вернул0xbadbad
указатель. Какое имя экземпляра для*(0xbadbad)
? - person ivaigult   schedule 24.08.2015