Проверьте код ниже, и я поставил информацию о выходе в комментарии. Я использовал gcc 4.8.5 и Centos 7.2.
#include <iostream>
#include <cstdio>
class C
{
public:
void foo() {
printf("%p, %p\n", &C::c, &(C::c)); // output value is 0x4, 0x7ffc2e7f52e8
std::cout << &C::c << std::endl; // output value is 1
}
int a;
int c;
};
int main(void)
{
C co;
printf("%p\n", &C::c); // output value is 0x4
std::cout << &C::c << std::endl; // output value is 1
// printf("%p\n", &(C::c)); // compile error, invalid use of non-static data member 'C::c'
co.foo();
return 0;
}
- Согласно C++ оператору Precedence operator оператор
::
имеет более высокий приоритет, чем оператор&
. Я думаю, что&C::c
равен&(C::c)
, но результат говорит об обратном. Почему они разные? -
&(C::c)
вызывает ошибку компиляции в main, но не в функцииfoo
Почему? - Значение
&C::c
отличается вprintf
иstd::cout
, почему это так?