- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
template< class T >
T* addressof(T& arg)
{
return reinterpret_cast<T*>(
&const_cast<char&>(
reinterpret_cast<const volatile char&>(arg)));
}
...
template<class T>
struct Ptr {
...
T** operator&() { return &data; }
};
int main() {
Ptr<int> p(new int(42));
f(&p); // calls int** overload
f(std::addressof(p)); // calls Ptr<int>* overload, (= this)
}
Obtains the actual address of the object or function arg, even in presence of overloaded operator&
http://en.cppreference.com/w/cpp/memory/addressof
WTF?
kurwa-nextgen 04.10.2016 17:16 # +1
myaut 04.10.2016 17:18 # 0
kurwa-nextgen 04.10.2016 17:21 # +1
Dummy00001 04.10.2016 23:02 # 0
эти извраты выглядят как если бы кто-то разложил в проекте граблей, перекрыв оператор &. а потом кому-то еще это показалось не достаточным, и он под этими граблями еще и мин позакапывал.
kurwa 05.10.2016 01:00 # 0
Dummy00001 05.10.2016 01:05 # 0
но в конце это все таки разрабы которые решают этим всем говно пользоватся...
... по личному опыту, в 99% случаев, этим народ пользуется только потому что не достаточно умные/опытные что бы додуматся до нормального человеческого решения. или религия с дезайном не позволяет.
3_14dar 05.10.2016 04:00 # 0
Это и есть главпроблема цпп?
guest 04.10.2016 18:06 # 0
guest 04.10.2016 22:23 # 0
Xom94ok 04.10.2016 22:46 # 0
guest 04.10.2016 22:49 # 0
guest 04.10.2016 22:50 # 0
huesto 04.10.2016 23:14 # 0
huesto 04.10.2016 23:15 # 0
huesto 04.10.2016 23:42 # 0
huesto 05.10.2016 17:56 # 0
huesto 04.10.2016 23:19 # 0
huesto 04.10.2016 23:39 # 0
barop 05.10.2016 04:26 # −1
CrashTesterAnusov 05.10.2016 05:48 # −64
huesto 05.10.2016 18:11 # 0
huesto 04.10.2016 23:21 # 0
huesto 04.10.2016 23:48 # 0
huesto 05.10.2016 17:59 # 0
А правда что сишный void* используется для тех же целей что и object в Java и C#? (передать кусок похуй чего в функцию)
roman-kashitsyn 05.10.2016 18:14 # +1
Object в Java/C# — это больше, чем адрес. Он знает, какого он типа, его можно сравнить на глубое равенство с любым другим объектом и делать с ним другие непотребства. Например, использовать как мутекс. В жабе Object до сих пор используется для реализации конейнеров, но напрямую в интерфейсах он редко встречается.
huesto 05.10.2016 18:18 # 0
huesto 05.10.2016 20:57 # 0