标签: libstdc++

矢量<Point> myArr的深层副本

为了制作一份深刻的副本myArr,

vector <Point> myArr;
Run Code Online (Sandbox Code Playgroud)

哪个Point是一个有2个整数的成员,

我需要做一些特别的事吗?或者还可以

vector <Point> otherArr = myArr;
Run Code Online (Sandbox Code Playgroud)

我需要删除一些点,otherArr但同时我需要所有的点以myArr供以后使用.

提前致谢

c++ vector member deep-copy libstdc++

4
推荐指数
1
解决办法
6860
查看次数

cppcheck错误:危险的迭代器用法

代码:

for(x=abc.begin();x!=abc.end();x++)  
{  
   if(-----)  
   {
      ----  
      abc.erase(x);  
   }
}
Run Code Online (Sandbox Code Playgroud)

错误是:::
Dangerous iterator用法
擦除后迭代器无效,因此解除引用或将其与另一个迭代器进行比较无效.

在上面的代码中使用擦除功能的错误用法是什么?

c++ erase libstdc++

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

SGI STL Rope in g ++?

看来我的/usr/include/c++/4.5.1/ext/rope(和ropeimpl.h)中有一个执行绳索.我将它与SGI STL进行了比较,代码似乎与代码库完全相同.

我不知道它的状态或功能与否.我也不知道这是否是超级陈旧的陈旧代码或代码正在进行中

在任何情况下,我都没有找到任何关于如何使用它的参考(如果功能).你知道我错过的东西吗?有可以使用的用法示例吗?

编辑,如果你在这里看到cvs历史,你会看到最后一次活动是4个月前,看起来不是很活跃,但也不会放弃.

c++ stl sgi libstdc++ rope

4
推荐指数
1
解决办法
1893
查看次数

GNU _M_前缀背后的心态

如果我们看看GNU的libstdc ++实现,我注意到在标准类的实现中,各种类的私有成员函数都带有前缀_M_.例如,std::basic_string<>其中一个成员被称为bool _M_is_shared() const;.

我理解为私有成员变量设置某种命名约定的动机.这有助于在视觉上区分类成员和函数局部变量.但我不明白为什么_M_前缀是私有成员函数的首选.

如果我看到一些代码调用的例子:is_shared();基本上只有几个选项:

  1. 它是这个类的成员函数
  2. 它是父类的成员函数
  3. 这是一个全球性的功能.

前两个,都有前缀,所以没有帮助.由于命名空间污染问题,最后一个不会发生在任何理智的实现中.图书馆应该引入的唯一全局变量是标准规定的全局变量.所以这就是问题的症结所在......

由于私人成员职能不公开.无法以任何方式影响派生类.我不认为名称冲突在这里真的是一个问题......基本上这些只不过是一个私有的实现细节.为什么要担心(IMO)丑陋的_M_前缀?标准中有什么东西不允许引入额外的私人成员吗?如果是这样,除非有我遗漏的东西,否则会让我感到愚蠢.

c++ gnu naming-conventions libstdc++

4
推荐指数
1
解决办法
247
查看次数

具有const成员的对象上的优先级队列比较器

我正在尝试实现一个优先级队列,该队列使用一个具有const成员的对象,该成员用于定义队列中对象的优先级.以下是我正在使用的精简版本

#include <vector>
#include <queue>

class Event {
public:
    Event(float _time) : time(_time) {};
    const float time;
};

struct EventComp {
public:
    bool operator()(const Event& a, const Event& b) const {
      return a.time < b.time;
    }
};

class EventQueue {
private:
    std::priority_queue<Event, std::vector<Event>, EventComp> events;
};


int main(int argc, char *argv[])
{
    EventQueue q;
}
Run Code Online (Sandbox Code Playgroud)

当我尝试编译时(使用g ++ -std = c ++ 11),我收到以下错误消息,我不太明白.

g++ -std=c++11 events.cpp -o events
In file included from /usr/include/c++/4.8/queue:62:0,
                 from events.cpp:2:
/usr/include/c++/4.8/bits/stl_heap.h: In instantiation of ‘void std::__adjust_heap(_RandomAccessIterator, …
Run Code Online (Sandbox Code Playgroud)

c++ libstdc++ c++11

4
推荐指数
1
解决办法
881
查看次数

Cmake测试:是一个针对libc ++或libstd ++编译/链接的库?

我正在使用cmake来管理使用第三方库的项目.

该库可以针对libc ++或libstd ++进行编译/链接(具体取决于版本).

我知道如何告诉cmake针对libc ++或libstdc ++编译/链接我的项目,但我不知道如何检查我使用的库是否是针对libc ++或libstd ++编译/链接的.是否有任何cmake命令来检查?

c++ cmake libstdc++ libc++

4
推荐指数
1
解决办法
545
查看次数

为什么我不能专门化std :: tuple_element?

以下程序尝试std::tuple_element为用户定义的类型提供特化foo.不幸的是,clang-3.5用libc ++拒绝它,但是使用其他编译器或使用其他标准库来clang-3.5接受程序.这是对的吗?如果不是,为什么不呢?

#include <utility>

struct foo {};

namespace std
{
    template<size_t, class> struct tuple_element;
    template<size_t i>
    struct tuple_element<i, foo> {};
}

int main()
{
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译器输出:

$ clang-3.5 -std=c++11 -stdlib=libc++ -lc++ test.cpp
test.cpp:11:8: error: explicit specialization of non-template struct 'tuple_element'
struct tuple_element<i, foo> {};
       ^            ~~~~~~~~
1 error generated.

$ clang-3.5 -std=c++11 -lstdc++ test.cpp
(no error)

$ g++-4.9 -std=c++11 test.cpp
(no error)
Run Code Online (Sandbox Code Playgroud)

clang libstdc++ c++11 libc++

4
推荐指数
1
解决办法
575
查看次数

gcc not_fn implementation:为什么_Not_fn接受额外的int参数?

最近我看了一下gcc 提供的函数模板的实现.std::not_fn

此函数模板的返回类型是_Not_fn- 包装类模板,它取消包装的可调用对象.

事实证明,_Not_fn构造函数接受一个int未明确使用的附加参数:

template<typename _Fn2>
    _Not_fn(_Fn2&& __fn, int)
    : _M_fn(std::forward<_Fn2>(__fn)) { }
Run Code Online (Sandbox Code Playgroud)

对构造函数的调用如下所示:

template<typename _Fn>
inline auto not_fn(_Fn&& __fn) 
    noexcept(std::is_nothrow_constructible<std::decay_t<_Fn>, _Fn&&>::value)
{
    return _Not_fn<std::decay_t<_Fn>>{std::forward<_Fn>(__fn), 0}; // <- 0 is passed here
}
Run Code Online (Sandbox Code Playgroud)

题:

这个附加int参数的目的是什么?为什么gcc实现需要它?

c++ gcc libstdc++ c++17

4
推荐指数
1
解决办法
142
查看次数

GLIBCXX_3.4.26找不到

我正在尝试建立开放式嵌入式项目。但是它显示了一些错误,例如

/usr/lib/x86_64-linux-gnu/libstdc++.so.6: GLIBCXX_3.4.26 not found
Run Code Online (Sandbox Code Playgroud)

如何在Ubuntu 16.04中安装GLIBCXX_3.4.26?

c++ g++ libstdc++

4
推荐指数
1
解决办法
3502
查看次数

在运行时读取libstdc ++版本

我的应用程序受到相当严重的数据丢失方式的旧版本libstdc ++的错误的影响。如何使用或选择正确的库版本的补救措施是已知的,但对部署和构建的更改不可靠。在被自己咬了不止一次之后,我想停止痛苦,并引入运行时检查以获取足够新版本的libstdc ++。在部署无法使用正确版本的情况下,如何访问该版本以显示较大的警告消息。请注意,我需要的次要版本又名随GCC 8。-rpathLD_LIBRARY_PATHlibstdc++.so.6.0.25GLIBCXX_3.4.25

c++ libstdc++

4
推荐指数
1
解决办法
268
查看次数

标签 统计

libstdc++ ×10

c++ ×9

c++11 ×2

libc++ ×2

c++17 ×1

clang ×1

cmake ×1

deep-copy ×1

erase ×1

g++ ×1

gcc ×1

gnu ×1

member ×1

naming-conventions ×1

rope ×1

sgi ×1

stl ×1

vector ×1