小编lau*_*svr的帖子

什么时候在构造函数和析构函数中调用this->是安全的

到目前为止,我还没能找到一个确凿的答案.何时this->从对象内调用是安全的.特别是从构造函数和析构函数内部.

而且,在使用公共继承时.使用向上和向下转换此调用的结果是否安全?

例如:

class foo
{
   foo():
   a(),
   b(this->a)//case 1
   {
       this-> a = 5; //case 2
   }

   int a;
   int b;
};

class bar: public baz
{
   bar():
   baz(this)//case 3 - assuming baz has a valid constructor
   {


   }

}
Run Code Online (Sandbox Code Playgroud)

最后是最不可能的一个

foo()
   {
      if(static_cast<bar*>(this));//case 4
   }
Run Code Online (Sandbox Code Playgroud)

以上哪些案件合法?

注意:我知道上面的许多做法都是不可取的.

c++ constructor destructor c++11

33
推荐指数
3
解决办法
3万
查看次数

Git忽略离子项目

我是一些新的应用程序与离子和非常新的存储库的主题,当我做提交无限的文件上传,我发现很难确定项目的变化,这就是为什么我想要求帮助在这里,如果我可以指导你忽略文件,如果一个文件默认存在占用和在哪里,因为大多数工作是在www文件夹中完成的.对不起,如果问题非常基本,但我会很快解决这个问题.

git ionic-framework

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

为什么不完全实现原子双重

我的问题很简单.为什么没有std::atomic<double> 完全实施?我知道它与互锁变量访问有关.但是我真的没有看到,为什么这不应该是双倍的.

它被指定可以使用任何普通的可复制类型.当然,双重是其中之一.所以基本操作应该没问题(设置,阅读等).但是,在整数上可能有一组额外的操作(fetch_add,++,+ =等).

双重与这些类型的差别很小.它是原生的,三维可复制的等等.为什么标准不包括这些类型的双重?

c++ floating-point atomic compare-and-swap stdatomic

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

为什么条件变量需要锁定(因此也需要互斥锁)

条件变量是c ++ 11的一个方面我还在苦苦挣扎.从我收集到的条件变量非常类似于信号量.

但话说回来,信号量不需要锁定才能运行.条件变量可以.而锁又需要一个互斥锁.因此,为了使用信号量的相当简单的功能,我们现在不仅需要管理条件变量.但也是一个互斥锁和一个锁.

那么为什么条件变量需要这个呢?通过添加此要求可以提供哪些附加功能?

c++ concurrency flags multithreading c++11

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

移动赋值运算符和移动构造函数之间的区别?

有一段时间,这让我感到困惑.到目前为止,我还没有找到满意的答案.问题很简单.什么时候move assignment operator被调用,什么时候move constructor operator被调用?

cppreference.com上的代码示例产生以下有趣结果:

移动赋值运算符:

a2 = std::move(a1); // move-assignment from xvalue
Run Code Online (Sandbox Code Playgroud)

移动构造函数:

A a2 = std::move(a1); // move-construct from xvalue
Run Code Online (Sandbox Code Playgroud)

它是如何实现的?如果是这样的话,如果两者都实施了吗?如果它完全相同,为什么有可能创建一个移动赋值运算符重载.

c++ constructor move-semantics c++11

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

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

随着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
查看次数

log10函数返回int的性能

今天我需要一个廉价的log10函数,其中我只使用了int部分.假设结果是无效的,那么999的log10将是2.自己编写函数是否有益?如果是这样,哪种方式最好去.假设代码不会被优化.

log10的替代品我虽然;

  • 使用for循环除以或乘以10;
  • 使用字符串解析器(可能非常昂贵);
  • 使用整数log2()函数乘以常量.

先谢谢你:)

c++ int optimization

7
推荐指数
1
解决办法
3787
查看次数

如何在QT Creator中升级自定义小部件

在qt 5.2.1中,我创建了一些自定义小部件,例如按钮。传统上,有两种方法可以做到这一点。您可以升级现有的小部件。以及更改/添加功能。或从头开始创建自定义窗口小部件。我用了后者。

但是,在某些情况下,我想使用我的自定义窗口小部件,但是通过升级来更改其某些功能。通常的方法是添加一个小部件并对其进行升级。但是,在创建一种新型的提升小部件时,必须选择一个基类。在可以完成此操作的对话框中,仅列出默认的小部件。

是否可以在此列表中添加自定义窗口小部件?

问候,

劳里斯

编辑:

我已经玩了很多。现在突然将自定义小部件添加到基类列表中。但是我仍然不知道如何添加它。以及为什么这是列表上显示的唯一自定义窗口小部件。

c++ qt widget

5
推荐指数
1
解决办法
8525
查看次数

将位集强制转换为无符号字符,反之亦然

使用表示位的无符号字符数组。我遇到了以下问题。在MSVC 2013上投放std::bitset<8>为char,然后返回。似乎是一件有效的事情。

但是在C ++ 11 ISO标准中。我找不到有效的参考。根据我的能力,一个std::bitset仅仅是一个bool数组。随着更多的内存经济实施和围绕它的一些功能。

简而言之,我的问题是:下面的代码有效吗?

unsigned char* myChar = new unsigned char(0x0F);
((std::bitset<8>*)myChar)->set(2);
((std::bitset<8>*)myChar)->reset(6);

std::cout << "expression result:" << (uint8_t)*myChar;
Run Code Online (Sandbox Code Playgroud)

c++ binary casting bitset

5
推荐指数
1
解决办法
1846
查看次数

为什么std :: condition_variable的notify和wait函数都需要一个锁定的互斥锁

在我无休止地了解std::contion_variables的过程中,我遇到了以下问题.在此页面上显示以下内容:

void print_id (int id) {
  std::unique_lock<std::mutex> lck(mtx);
  while (!ready) cv.wait(lck);
  // ...
  std::cout << "thread " << id << '\n';
}
Run Code Online (Sandbox Code Playgroud)

之后它说:

void go() {
  std::unique_lock<std::mutex> lck(mtx);
  ready = true;
  cv.notify_all();
}
Run Code Online (Sandbox Code Playgroud)

据我了解,这两个功能都将停止std::unqique_lock.直到获得一个独特的锁.也就是说,没有其他线程有锁.

所以说print_id首先执行该功能.将获取唯一锁定,并且该功能将在等待线上停止.

如果go然后执行该函数(在单独的线程上),则该代码将在唯一的锁定行上停止.由于互斥锁已被该print_id功能锁定.

显然,如果代码是这样的话,这将无效.但我真的没有看到我没有到达这里.所以请赐教.

c++ multithreading mutex locking c++11

5
推荐指数
1
解决办法
957
查看次数