相关疑难解决方法(0)

string :: npos是什么意思

这句话string::npos在这里意味着什么

found=str.find(str2);

if (found!=string::npos)
    cout << "first 'needle' found at: " << int(found) << endl;
Run Code Online (Sandbox Code Playgroud)

c++

79
推荐指数
7
解决办法
11万
查看次数

指向数据成员地址的指针

我读过(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,依此类推.问题是区分没有数据成员的指针和指向第一个数据成员的指针.考虑例如:

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 …
Run Code Online (Sandbox Code Playgroud)

c++ pointers

5
推荐指数
2
解决办法
2690
查看次数

标签 统计

c++ ×2

pointers ×1