随着c ++ 11的引入,简单的可复制性已经变得非常相关.最值得注意的是使用'std :: atomic'.基础很简单.如果出现以下情况,课程foo可以轻易复制:
foo* src = new foo();
foo* dest = malloc(sizeof(foo));
memcpy(dest, src, sizeof(foo));
Run Code Online (Sandbox Code Playgroud)
具有相同的效果:
foo* src = new foo();
foo* dest = new foo(src);
Run Code Online (Sandbox Code Playgroud)
因此,复制内存的对象与复制构造函数具有相同的效果.然而,当然,这是一个问题.不仅有复制构造函数.但也移动构造函数,移动赋值运算符.等等.
std :: is_trivially_copyable可用于测试对象是否可以轻易复制.因此,通过反复试验,可以使对象易于复制.
但当然,一套定义明确的规则会更好一些:).所以我的要求.
我想知道在同一范围内有多个“常量引用”变量指向同一个对象是否存在内存成本:
const Animal& animal = getAnimal();
const Dog& dog = static_cast<const Dog&>(animal);
Run Code Online (Sandbox Code Playgroud)
从概念上讲,animal和dog是两个变量,每个变量都是指针大小,因此将占用 2 个寄存器(或堆栈上的 2* 指针大小区域)。
但是(假设没有多重继承等),编译器可以知道它们在整个生命周期中都必须保持相同的指针值。
那么,这两个变量能否共享一个寄存器(或堆栈上一个指针大小的区域)?
“可以”,我的意思是: