以下程序输出始终为1 1 1.在"C++对象模型内部"一书中,提到它将给出偏移量.目的还在于找出对象布局.但是,我对输出感到困惑.使用g ++ 4.5.2
class Test
{
public:
float a;
float b;
float c;
};
int main()
{
float Test::*ptr = &Test::a;
float Test::*ptr1 = &Test::b;
float Test::*ptr2 = &Test::c;
cout<<ptr<<endl;
cout<<ptr1<<endl;
cout<<ptr2<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
1
1
1
Run Code Online (Sandbox Code Playgroud)
编辑(跟进问题):在书中提到origin.y = 0
可以转换为&origin + (Point3d::y-1)
原点是Point3d的对象,y是Point3d类的成员变量.虽然当我编译它时给了我编译错误.
当我读一些文章时,我发现这条线是如此神秘.
new (new_ptr + i) T(std::move(old_ptr[i]));
Run Code Online (Sandbox Code Playgroud)
有人可以解释这种语法是如何工作的吗?
我有两个文件.一个是scala,另一个是java.
Scala文件有一个返回scala不可变映射的函数.
Java文件想要将该映射用作字典.
我是scala和java的新手.如何将该scala映射转换为java dicionary?
即使有很多关于如何在c ++中处理虚函数的文章,我也无法清楚一个基本的疑问.派生类的vptr变量是否被基类变量覆盖.ptr varible的名字也被破坏了吗?
Class Base
{
public:
virtual void test();
};
class Derived
{
public:
virtual void test();
};
Run Code Online (Sandbox Code Playgroud)
如果我打电话
Base b = new Derived();
b->test();
Run Code Online (Sandbox Code Playgroud)
它转变为
(*b->vptr[<index>])(b);
Run Code Online (Sandbox Code Playgroud)
索引指向vtable条目.
我怀疑这个vptr是否也被命名为?