64,676
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
using namespace std;
int main()
{
const int a = 1;
int & b = const_cast<int &>(a);
cout<<a<<" "<<b<<endl; // 1 1
b=10;
cout<<a<<" "<<b<<endl; // 1 10
// 以上a和b的值不一样,但打印出的地址是相同的,这是如何做到的呢??
cout << "Address of a is " << reinterpret_cast<int>(&a) <<endl;
cout << "Address of b is " << reinterpret_cast<int>(&b) <<endl;
return 0;
}
#include <iostream>
using namespace std;
int main()
{
const int a = 0;
int & b1 = const_cast<int &>(a);
b1=1;
int & b2 = const_cast<int &>(a);
b2=2;
int & b3 = const_cast<int &>(a);
b3=3;
cout<<a<<" "<<b1<<" "<<b2<<" "<<b3<<endl; // 0 3 3 3
cout << "Address of a is " << reinterpret_cast<int>(&a) <<endl;
cout << "Address of b1 is " << reinterpret_cast<int>(&b1) <<endl;
cout << "Address of b2 is " << reinterpret_cast<int>(&b2) <<endl;
cout << "Address of b3 is " << reinterpret_cast<int>(&b3) <<endl;
return 0;
}
多谢星星给出关键词“常量折叠”。
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
const int a = 1;
printf("&a = 0x%p\n",&a);
int* pa = const_cast<int *>(&a);
int & b = const_cast<int &>(a);
// 以上a和b的值不一样,但打印出的地址是相同的,这是如何做到的呢??
printf("&a = 0x%p,pa=0x%p\n",&a,pa);
printf("&b = 0x%p\n",&b);
printf("reinterpret_cast<int>(&a) = 0x%p\n",reinterpret_cast<int>(&a));
printf("reinterpret_cast<int>(&b) = 0x%p\n",reinterpret_cast<int>(&b));
cout<<a<<" "<<b<<endl; // 1 1
b=10;
//cout<<a<<" "<<b<<endl; // 1 10
//cout<<a<<" "<<b<<endl; // 1 10
int c = a;
printf("%d,%d,%d",a,b,c);
// 以上a和b的值不一样,但打印出的地址是相同的,这是如何做到的呢??
printf("&a = %p\n",&a);
printf("&b = %p\n",&b);
printf("reinterpret_cast<int>(&a) = 0x%p\n",reinterpret_cast<int>(&a));
printf("reinterpret_cast<int>(&b) = 0x%p\n",reinterpret_cast<int>(&b));
return 0;
}
试了试水,很深,正如楼主所说