这句话string::npos在这里意味着什么
found=str.find(str2);
if (found!=string::npos)
cout << "first 'needle' found at: " << int(found) << endl;
Run Code Online (Sandbox Code Playgroud) 我读过(Inside C++对象模型)C++中指向数据成员的指针的地址是数据成员加1的偏移量?
我在VC++ 2005上尝试这个,但我没有得到确切的偏移值.
例如:
Class X{
public:
int a;
int b;
int c;
}
void x(){
printf("Offsets of a=%d, b=%d, c=%d",&X::a,&X::b,&X::c);
}
Run Code Online (Sandbox Code Playgroud)
应该打印偏移a = 1,b = 5,c = 9.但是在VC++ 2005中,它是a = 0,b = 4,c = 8.
我无法理解这种行为.
摘录自书:
"然而,对于C和C++程序员来说,这种期望是一个传统的错误.
如果vptr放在末尾,则类布局中三个坐标成员的物理偏移分别为0,4和8,如果vptr放置在类的开头,则分别为4,8和12.但是,从获取成员地址返回的值总是增加1.因此实际值为1,5和9,依此类推.问题是区分没有数据成员的指针和指向第一个数据成员的指针.考虑例如:
Run Code Online (Sandbox Code Playgroud)float Point3d::*p1 = 0; float Point3d::*p2 = &Point3d::x; // oops: how to distinguish? if ( p1 == p2 ) { cout << " p1 & p2 contain the same value — "; cout << " they must address the …