小编sbi*_*sbi的帖子

错误:从'void*'转换为'int'会失去精度

我有一个原型函数,void* myFcn(void* arg)用作pthread的起点.我需要将参数转换为int以供以后使用:

int x = (int)arg;
Run Code Online (Sandbox Code Playgroud)

编译器(GCC版本4.2.4)返回错误:

file.cpp:233: error: cast from 'void*' to 'int' loses precision
Run Code Online (Sandbox Code Playgroud)

投这个的正确方法是什么?

c++ casting void-pointers

59
推荐指数
8
解决办法
13万
查看次数

在多线程C++ 11程序中未处理异常时会发生什么?

如果我有一个C++ 11程序运行两个线程,其中一个抛出一个未处理的异常,会发生什么?整个程序会死于火热的死亡吗?抛出异常的线程是否会单独死亡(如果是这样,我可以在这种情况下获得异常)吗?还有别的吗?

c++ multithreading exception c++-faq c++11

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

从C到C++获得bool并返回

在设计要通过连接C和C++代码的C API传递的数据结构时,使用它是否安全bool?也就是说,如果我有struct这样的:

struct foo {
  int bar;
  bool baz;
};
Run Code Online (Sandbox Code Playgroud)

是否保证C的大小和含义baz以及它的位置foo由C(它是a _Bool)和C++ 以相同的方式解释?

我们正在考虑在一个平台上进行此操作(在Beaglebone上使用GCC for Debian 8),C和C++代码由相同的GCC版本(分别为C99和C++ 11)编译.不过,欢迎提出一般性意见.

c c++

47
推荐指数
4
解决办法
5051
查看次数

何时通过引用传递以及何时通过C++中的指针传递?

常见情况:

  1. 将std :: string传递给函数foo(std :: string*)或foo(std :: string&);
  2. 将tr1 :: shared_ptr传递给函数foo(tr1 :: shared_ptr*ptr)或foo(tr1 :: shared_ptr&ptr);

一般来说,什么是好的做法.我总是感到困惑.首先,将所有内容作为引用传递似乎是一致的,但是不可能将Literals作为引用传递或将NULL作为引用传递.

类似地,将所有内容作为指针似乎都很好,但是我必须担心指针可能指向NULL并检查该函数开头的那些条件.

你认为以下片段是好的吗?

#include <iostream>
#include <vector>
#include <map>
#include <string>
#include <tr1/memory>
#include <algorithm>
using namespace std;
using namespace std::tr1;

int main(){
        map<string, shared_ptr<vector<string> > > adjacencyMap;
        vector<string>* myFriends = new vector<string>();
        myFriends->push_back(string("a"));
        myFriends->push_back(string("v"));
        myFriends->push_back(string("g"));
        adjacencyMap["s"] = shared_ptr<vector<string> >(myFriends);
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

谢谢Ajay

c++

46
推荐指数
4
解决办法
2万
查看次数

std :: unique_ptr用法

std::unique_ptr<int> p1(new int);
std::unique_ptr<int> p2(new int);
p2=p1;
Run Code Online (Sandbox Code Playgroud)

在这里似乎p1不再是"唯一的",因为p2也指它

这是合法的c ++?unique_ptr有copy_semantics吗?如果不是,并且它只有移动语义,那么在将p1分配给p2后p1是否设置为NULL?

编辑:

好的,所以正确的版本是

 p2=std::move(p1)
Run Code Online (Sandbox Code Playgroud)

据此,在此分配后,p1无效?与auto_ptr的区别在哪里?所有权明确规定所有权转让比隐式更安全,因为我认为auto_ptr是这种情况

c++ unique-ptr c++11

41
推荐指数
2
解决办法
5万
查看次数

向非C++程序员解释C++ SFINAE

什么是C++中的SFINAE?

能不能用不熟悉C++的程序员理解的话来解释它?另外,像Python这样的语言中的SFINAE对应的概念是什么?

c++ programming-languages c++-faq sfinae

39
推荐指数
4
解决办法
4077
查看次数

如何从更基本的同步原语进行多次读取/单次写入锁定?

我们发现在代码中我们有几个位置,其中并发读取受互斥锁保护的数据是相当常见的,而写入很少见.我们的测量结果似乎表明,使用简单的互斥锁严重阻碍了读取数据的代码的性能.所以我们需要的是多读/单写互斥.我知道这可以建立在更简单的原语之上,但在我尝试自己之前,我宁愿要求现有的知识:

从简单的同步原语中构建多读/单写锁的批准方法是什么?

我确实知道如何制作它,但我宁愿通过我(可能是错误的)想出的答案而不偏不倚.(注意:我期望的是如何解释它,可能是伪代码,而不是完整的实现.我当然可以自己编写代码.)

注意事项:

  • 这需要有合理的表现.(我想到的是每次访问需要两次锁定/解锁操作.现在可能不够好,但需要其中许多操作似乎是不合理的.)

  • 通常,读取数量更多,但写入比读取更重要且性能更敏感.读者不能让作家们挨饿.

  • 我们被困在一个相当古老的嵌入式平台(VxWorks 5.5的专有变体)上,有一个相当旧的编译器(GCC 4.1.2)和boost 1.52 - 除了大多数依赖于POSIX的boost部分,因为POSIX没有完全实现在那个平台上.可用的锁定原语基本上是几种信号量(二进制,计数等),我们已经在其上创建了互斥量,条件变量和监视器.

  • 这是IA32,单核.

c++ multithreading synchronization readwritelock

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

检查矢量是否为空

假设我有std::vector发言权Vector

现在在对向量(插入或删除)执行某些操作之后,我想检查向量是否为空,并且基于此我想要执行某些操作.

哪种方法更好

方法1

if (Vector.size() == 0){ /* operations */ }
Run Code Online (Sandbox Code Playgroud)

方法2

if (Vector.empty()) { /* operations */ }
Run Code Online (Sandbox Code Playgroud)

哪种方法更好,1还是2

c++ stl vector

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

字符串文字不允许作为非类型模板参数

以下引用来自Addison Wesley的C++模板.有人可以帮助我用简单的英语/外行人的术语来理解它的要点吗?

因为字符串文字是具有内部链接的对象(两个字符串文字具有相同的值但在不同的模块中是不同的对象),所以您不能将它们用作模板参数:

c++ templates string-literals

37
推荐指数
3
解决办法
5784
查看次数

在C++ 11中更改了默认初始化的含义?

C++ 2003 8.5/5说:

缺省初始化类型的对象T表示:

- 如果T是非POD类类型(第9节),则调用T的默认构造函数(如果T没有可访问的默认构造函数,则初始化是错误的);

- 如果T是数组类型,则每个元素都是默认初始化的;

- 否则,对象被零初始化.

[重点补充.]

C++ 2011标准将最后一项更改为

- 否则,不执行初始化.

对于某些程序来说,这似乎是一个突破性的变化.这是故意的吗?

编辑

以下是一些激励这个问题的代码:

class Foo {
  public:
    Foo() : m_values() {}

    int m_values[3];
};
Run Code Online (Sandbox Code Playgroud)

在C++ 11之前,我认为m_values在默认构造函数中明确提到将默认初始化该数组.由于数组的元素是标量,我预计这意味着值都被设置为0.

在C++ 11中,似乎不再保证会发生这种情况.但也许正如Mooing Duck在评论中指出的那样,也许这不再是默认初始化的情况,而是一些保留预期行为的其他形式.引文欢迎.

c++ initialization c++-faq language-lawyer c++11

34
推荐指数
1
解决办法
3780
查看次数