相关疑难解决方法(0)

"放置新"有什么用途?

有没有人曾经使用过C++的"贴牌新品"?如果是这样,那该怎么办?在我看来,它只对内存映射硬件有用.

c++ memory-management placement-new new-operator

385
推荐指数
18
解决办法
16万
查看次数

std ::对象的向量和const-correctness

考虑以下:

class A {
public:
    const int c; // must not be modified!

    A(int _c)
    :   c(_c)
    {
        // Nothing here
    }

    A(const A& copy)
    : c(copy.c)
    {
        // Nothing here
    }    
};



int main(int argc, char *argv[])
{
    A foo(1337);

    vector<A> vec;
    vec.push_back(foo); // <-- compile error!

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

显然,复制构造函数是不够的.我错过了什么?

编辑:Ofc.我无法在operator =()方法中更改this-> c,因此我没有看到如何使用operator =()(尽管std :: vector需要).

c++ vector const-correctness

15
推荐指数
3
解决办法
4454
查看次数

将对象的"this"指针更改为指向不同的对象

class C{
   //methods and properties
}

void C::some_method(C* b){
    delete this;
    this = b;     
}
Run Code Online (Sandbox Code Playgroud)

这在编译时给出了以下错误:

error: lvalue required as left operand of assignment
Run Code Online (Sandbox Code Playgroud)

我的意图:假设有C类的对象a和b.C类的内容可能非常庞大,而且逐字段复制可能非常昂贵.我想以经济的方式a将' '的所有内容替换为' b'.

默认复制构造函数会执行预期的任务吗?

我找到了一个叫做'移动构造函数'的东西 http://akrzemi1.wordpress.com/2011/08/11/move-constructor/

也许,它可能会得到我想要的效果.

c++ this

13
推荐指数
4
解决办法
9331
查看次数

现在是否可以使用当前的 C++ 标准草案版本为具有 const 字段而无需 UB 的类定义复制赋值运算符

在这里,我们有很多关于 const 字段赋值和未定义行为 (UB) 的问题。例如,这个接受的答案说,由于 UB 的原因,不可能为具有 const 字段的类定义复制赋值运算符。

但我检查了 C++ 标准的当前草案版本(N4861)。表示将是 UB [basic.life.8]的部分是:

如果一个对象的生命周期结束后,在该对象占用的存储空间被重用或释放之前,在原对象占用的存储位置上创建一个新的对象,一个指向原对象的指针,一个指向该对象的引用引用原始对象,或者原始对象的名称将自动引用新对象,并且一旦新对象的生命周期开始,可用于操作新对象,如果:...

原始对象的类型不是 const 限定的,并且如果是类类型,则不包含任何类型为 const 限定的非静态数据成员或引用类型,并且

现已替换为:

o1 不是一个完整的 const 对象,并且

我的解释是,下面的代码现在没有 UB。这样对吗?我问这个是因为在样本中,没有简历合格的成员 - 所以我仍然不清楚。

#include <iostream>

struct C {
  const int i;
  void f() const {
     std::cout << i << "\n";
  }
  C(int i) : i(i) {}
  C& operator=( const C& );
};

C& C::operator=( const C& other) {
  if ( this != &other ) {
    this->~C();                 // lifetime …
Run Code Online (Sandbox Code Playgroud)

c++ undefined-behavior language-lawyer c++20

5
推荐指数
0
解决办法
135
查看次数

像STM8一样编程STM32(寄存器级GPIO)

我像这样编写STM8 GPIO,PD_ODR_ODR4 = 1;但stm32f10x.h没有此功能,是否有任何.h文件定义了位。

抱歉,我不知道如何更好地解释这个问题。

我尝试了多个GPIO库。

强文本

c stm32 iar stm8

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