相关疑难解决方法(0)

哪些规则确定对象是否可以轻易复制

随着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可用于测试对象是否可以轻易复制.因此,通过反复试验,可以使对象易于复制.

但当然,一套定义明确的规则会更好一些:).所以我的要求.

c++ move c++11

12
推荐指数
1
解决办法
3167
查看次数

多个“const 引用”变量可以共享相同的内存吗?

我想知道在同一范围内有多个“常量引用”变量指向同一个对象是否存在内存成本:

const Animal& animal = getAnimal();
const Dog& dog = static_cast<const Dog&>(animal);
Run Code Online (Sandbox Code Playgroud)

从概念上讲,animaldog是两个变量,每个变量都是指针大小,因此将占用 2 个寄存器(或堆栈上的 2* 指针大小区域)。

但是(假设没有多重继承等),编译器可以知道它们在整个生命周期中都必须保持相同的指针值。

那么,这两个变量能否共享一个寄存器(或堆栈上一个指针大小的区域)?
“可以”,我的意思是:

  • C++ 标准允许吗?
  • 现代编译器会这样做吗?

c++ memory reference compiler-optimization

2
推荐指数
1
解决办法
105
查看次数

标签 统计

c++ ×2

c++11 ×1

compiler-optimization ×1

memory ×1

move ×1

reference ×1