Проверьте код ниже, и я поставил информацию о выходе в комментарии. Я использовал 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, почему это так?