假设我们有一个类B,有一个member是默认初始化42.这个类知道如何打印它的值member.(它在c'tor中这样做):
struct B
{
B() : member(42) { printMember(); }
void printMember() const { std::cout << "value: " << member << std::endl; }
int member;
};
Run Code Online (Sandbox Code Playgroud)
然后我们添加一个A接收a的const引用的类,B并要求B打印它的值:
struct A
{
A(const B& b) { b.printMember(); }
};
Run Code Online (Sandbox Code Playgroud)
最后,我们添加另一个Aggregate聚合a A和a的类B.棘手的部分是a类型的对象A在对象b类型之前声明B,但是然后a使用(尚未生效的?)引用初始化b:
struct Aggregate
{
A a;
B b;
Aggregate() : a(b) …Run Code Online (Sandbox Code Playgroud) c++ constructor initialization default-constructor undefined-behavior
在下面的示例代码中,我分配了struct Chunk的一些实例.在for循环中,然后迭代通过内存块并使用指针或引用访问不同的实例,并为它们分配一些随机数据.
但哪个for循环执行速度最快?根据我的知识,我会说参考循环将是最快的,因为它不需要解除引用并且可以直接访问内存中的实例.我有多错/对吗?
struct Chunk {
unsigned int a;
float b;
const char* c;
};
int main() {
Chunk* pData = new Chunk[8];
for( unsigned int i = 0; i < 8; ++i ) {
Chunk* p = &pData[i];
p->a = 1;
p->b = 1.0f;
p->c = "POINTERS";
}
for( unsigned int i = 0; i < 8; ++i ) {
Chunk& r = pData[i];
r.a = 1;
r.b = 1.0f;
r.c = "REFERENCES";
}
delete [] pData;
return 0; …Run Code Online (Sandbox Code Playgroud)