到目前为止,我还没能找到一个确凿的答案.何时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)
以上哪些案件合法?
注意:我知道上面的许多做法都是不可取的.
我是一些新的应用程序与离子和非常新的存储库的主题,当我做提交无限的文件上传,我发现很难确定项目的变化,这就是为什么我想要求帮助在这里,如果我可以指导你忽略文件,如果一个文件默认存在占用和在哪里,因为大多数工作是在www文件夹中完成的.对不起,如果问题非常基本,但我会很快解决这个问题.
条件变量是c ++ 11的一个方面我还在苦苦挣扎.从我收集到的条件变量非常类似于信号量.
但话说回来,信号量不需要锁定才能运行.条件变量可以.而锁又需要一个互斥锁.因此,为了使用信号量的相当简单的功能,我们现在不仅需要管理条件变量.但也是一个互斥锁和一个锁.
那么为什么条件变量需要这个呢?通过添加此要求可以提供哪些附加功能?
有一段时间,这让我感到困惑.到目前为止,我还没有找到满意的答案.问题很简单.什么时候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 ++ 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可用于测试对象是否可以轻易复制.因此,通过反复试验,可以使对象易于复制.
但当然,一套定义明确的规则会更好一些:).所以我的要求.
今天我需要一个廉价的log10函数,其中我只使用了int部分.假设结果是无效的,那么999的log10将是2.自己编写函数是否有益?如果是这样,哪种方式最好去.假设代码不会被优化.
log10的替代品我虽然;
先谢谢你:)
在qt 5.2.1中,我创建了一些自定义小部件,例如按钮。传统上,有两种方法可以做到这一点。您可以升级现有的小部件。以及更改/添加功能。或从头开始创建自定义窗口小部件。我用了后者。
但是,在某些情况下,我想使用我的自定义窗口小部件,但是通过升级来更改其某些功能。通常的方法是添加一个小部件并对其进行升级。但是,在创建一种新型的提升小部件时,必须选择一个基类。在可以完成此操作的对话框中,仅列出默认的小部件。
是否可以在此列表中添加自定义窗口小部件?
问候,
劳里斯
编辑:
我已经玩了很多。现在突然将自定义小部件添加到基类列表中。但是我仍然不知道如何添加它。以及为什么这是列表上显示的唯一自定义窗口小部件。
使用表示位的无符号字符数组。我遇到了以下问题。在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) 在我无休止地了解std::contion_variable
s的过程中,我遇到了以下问题.在此页面上显示以下内容:
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++ ×9
c++11 ×5
constructor ×2
atomic ×1
binary ×1
bitset ×1
casting ×1
concurrency ×1
destructor ×1
flags ×1
git ×1
int ×1
locking ×1
move ×1
mutex ×1
optimization ×1
qt ×1
stdatomic ×1
widget ×1