Почему не совпадает указатель на объект, если сначала его превратит в any, а потом обратно в тот-же тип?
Пример:
#include <iostream>
#include <boost/any.hpp>
int main() {
int i = 1;
int* p = &i;
boost::any a = i;
int i2 = boost::any_cast<int>(a);
int* p2 = &i2;
std::cout << p << " == " << p2 << std::endl;
std::cout << i << std::endl;
*p = 2;
std::cout << i << std::endl;
*p2 = 3;
std::cout << i << std::endl;
}
Вывод:
[root@localhost Test]# make
=============================================
touch test
rm test
ccache -c
Cleaned cache
ccache g++ -c -Wall test.cpp -o test.o
ccache g++ test.o -o test
rm -r test.o
./test
0xbeb49740 == 0xbeb49748
1
2
2
Как можно этого избежать? Использовать как any сам указатель?
При чем тут any
?
Вот по сути ваш код:
int i = ...;
int* p = &i;
int i2 = ...;
int* p2 = &i2;
std::cout << p << " == " << p2 << std::endl;
У вас две разные переменные, которые, конечно же, находятся в памяти в разных местах - так что их адреса, понятно, разные.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть программа который переводит выражение в обратную польскую запись и потом вычисляет результатмне нужно в момент вычисления транслировать...
Есть файл, путь - C:\Windows\System32\config\SYSTEM "SYSTEM" - сам файл, лог, в С++ пишу такой код, но файл невозможно открыть:
Могу ли я определить указатель на функцию как поле в классе, записать в нее адрес функции (зная сигнатуру метода) и обращаться к данному полю...