这段代码有效,还是我的编译器坏了?
#include <future>
#include <iostream>
int main() {
std::cout << "doing the test" << std::endl;
std::promise<bool> mypromise;
std::future<bool> myfuture = mypromise.get_future();
mypromise.set_value(true);
bool result = myfuture.get();
std::cout << "success, result is " << result << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是输出:
$ g++-mp-4.8 -std=c++11 test.cpp
$ ./a.out
doing the test
Segmentation fault: 11
$
Run Code Online (Sandbox Code Playgroud)
我正在使用g ++ - mp-4.8,这是来自macports的gcc 4.8.
我疯了吗?
当一个人调用select()询问哪些文件描述符有"异常"等待时,这是什么意思?
如何触发其中一个"例外"?
如果有人能给我一个很好的解释,那就太棒了.我一直在谷歌搜索,无法找到一件事.
我正在尝试将联系人的多对多映射到组.
例如,如果我有:
我希望得到一个看起来像这样的关系:
userID | groupID
1 | 701
1 | 702
1 | 704
3 | 702
Run Code Online (Sandbox Code Playgroud)
我试过这个:
Cursor cursor = contentResolver.query(ContactsContract.Data.CONTENT_URI, null, new String[] {
ContactsContract.CommonDataKinds.GroupMembership.CONTACT_ID,
ContactsContract.CommonDataKinds.GroupMembership.GROUP_SOURCE_ID
}, null, null, null);
Run Code Online (Sandbox Code Playgroud)
但这并不是很有效.GROUP_SOURCE_ID列返回不是任何组ID的奇怪数字.有时甚至会返回0或负数.
我可以通过浏览每个组来构建这个映射,然后查找该组中的所有联系人,但这会需要很多查询,而我正试图保持快速(显然,只是那些少量查询非常慢!) .
谁能告诉我如何在一个查询中获得这种联系人到组的映射?
谢谢!
一直以来,我发现自己做了这样的事情:
Animal *animal = ...
if (Cat *cat = dynamic_cast<Cat *>(animal)) {
...
}
else if (Dog *dog = dynamic_cast<Dog *>(animal)) {
...
}
else { assert(false); }
Run Code Online (Sandbox Code Playgroud)
一旦我看到C++ 11中的闭包,我想知道,这样的事情可能吗?
Animal *animal = ...
typecase(animal,
[](Cat *cat) {
...
},
[](Dog *dog) {
...
});
Run Code Online (Sandbox Code Playgroud)
实现类型规划本来应该很容易,但我一直遇到一个问题,它无法弄清楚函数的参数,所以它无法知道尝试使用dynamic_cast,因为很难推断出lambdas的参数.花了几天的时间搜索谷歌和SO,但终于想通了,所以我将在下面分享我的答案.
查看https://firebase.google.com/docs/reference/js/firebase.firestore.Transaction,我看到了四种方法:删除,设置,获取,更新。
我打算构造一个可爱的小集合查询并将其传递给.get,但是我看到文档说.get“读取提供的DocumentReference引用的文档”。
看来这意味着我们无法使用Transaction对象获取集合或查询集合。
我可以使用查询的.get()方法而不是事务的.get()方法查询那些对象,但是如果集合从我下面改变了,事务将以不一致的状态结束,而无需重试。
看来我在这里撞墙。我的理解正确吗?我们不能以一致的方式访问事务内部的集合吗?
想出如何在屏幕右上方显示其中一条小通知气泡消息,请在下面回答.
如果我想调用这样的函数:
moo({ a: 4 });
Run Code Online (Sandbox Code Playgroud)
通常,我必须这样表达我的函数定义:
function moo(myArgObj) {
print(myArgObj.a);
}
Run Code Online (Sandbox Code Playgroud)
但是,这种出色的语法在spidermonkey中对于定义函数完全有效:
function moo({ a, b, c }) { // valid syntax!
print(a); // prints 4
}
Run Code Online (Sandbox Code Playgroud)
这是什么功能?
我最近了解到编译器会通过重新排列指令来优化代码,并且可以通过使用障碍来控制.
IIRC,锁定互斥锁是一个障碍,解锁互斥锁也会成为障碍,使关键部分内的代码不会出现.
所以pthread_mutex_lock和pthread_mutex_unlock必须隐含地是这些"障碍".如果我有这样的课程,包装我的互斥体怎么办?
class IMutex {
public:
virtual void lock() = 0;
virtual void unlock() = 0;
};
Run Code Online (Sandbox Code Playgroud)
在我看来,编译器不会知道我在lock()内调用pthread_mutex_lock(),而在unlock()内调用pthread_mutex_unlock(),因为它都是虚拟的.
这会导致错误吗?我是否需要以某种方式手动指定障碍?
我正在尝试并尝试创建一个接受两个列表的函数:一个浮点列表,一个整数列表.我的第一个方法是:
template<typename FloatIterator, typename IntIterator>
Thing *createThing(
FloatIterator floatsBegin,
FloatIterator floatsEnd,
IntIterator intsBegin,
IntIterator intsEnd
) {
...
}
Run Code Online (Sandbox Code Playgroud)
这适用于各种容器,甚至是普通的指针.但是,我无法轻松传入std :: initializer_list.例如,我希望能够像这样调用函数:
Thing *thing = createThing({ 3.0, 4.0, 5.0 }, { 0, 1, 2, 2, 3, 0 });
Run Code Online (Sandbox Code Playgroud)
所以我在想,我会尝试这样的事情:
template<typename FloatContainer, typename IntContainer>
Thing *createThing(const FloatContainer &floats, const IntContainer &ints) {
for (float f : floats) { ... }
for (int i : ints) { ... }
}
Run Code Online (Sandbox Code Playgroud)
这适用于stl容器和initializer_lists,但它不再适用于简单的指针.我不能再这样做了:
int numFloats;
float *floats = readFloatsFromFile(&numFloats, "myfloats.txt");
int numInts;
int *ints …Run Code Online (Sandbox Code Playgroud) 我经常看到人们说使用'em'是一个更好的主意,因为当人们需要更改其默认字体大小时,它会更好用.
但我从来没有听说有人改变他们的字体大小.但是,我听说有人(并且完成了自己)放大和缩小.放大和缩小工作正常.
它们已经过时了吗?我能最终回到像素吗?或者人们仍然会更改默认字体大小?如果他们这样做,当人们改变字体大小时,像素是否仍会破裂?
c++ ×4
c++11 ×3
android ×1
c ×1
concurrency ×1
ecmascript-6 ×1
firebase ×1
future ×1
gcc ×1
io ×1
java ×1
javascript ×1
lambda ×1
multiplexing ×1
mutex ×1
polymorphism ×1
syntax ×1
unix ×1