Questions tagged «libc++»

6
类型不完整的std :: unique_ptr无法编译
我在使用pimpl惯用语std::unique_ptr: class window { window(const rectangle& rect); private: class window_impl; // defined elsewhere std::unique_ptr<window_impl> impl_; // won't compile }; 但是,我在第304行中遇到了有关使用不完整类型的编译错误<memory>: 无效的将' sizeof'应用于不完整的类型' uixx::window::window_impl' 据我所知,std::unique_ptr应该可以使用不完整的类型。这是libc ++中的错误,还是我在这里做错了?

2
libc ++中短字符串优化的机制是什么?
该答案很好地概述了短字符串优化(SSO)。但是,我想更详细地了解它在实践中如何工作,特别是在libc ++实现中: 要符合SSO要求,字符串必须多短?这取决于目标体系结构吗? 访问字符串数据时,实现如何区分短字符串和长字符串?它是否像m_size <= 16其他成员变量中的一部分一样简单?(我想它的m_size一部分或一部分也可以用来存储字符串数据)。 我专门针对libc ++提出了这个问题,因为我知道它使用SSO,甚至在libc ++主页上也提到了这一点。 查看来源后,有一些观察结果: libc ++可以为字符串类使用两个略有不同的内存布局进行编译,这由_LIBCPP_ALTERNATE_STRING_LAYOUT标志控制。两种布局还区分了小端和大端机器,这使我们总共有4种不同的变体。在接下来的内容中,我将采用“普通”布局和小字节序。 进一步假设这size_type是4个字节,也value_type就是1个字节,这就是字符串的前4个字节在内存中的样子: // short string: (s)ize and 3 bytes of char (d)ata sssssss0;dddddddd;dddddddd;dddddddd ^- is_long = 0 // long string: (c)apacity ccccccc1;cccccccc;cccccccc;cccccccc ^- is_long = 1 由于短字符串的大小在高7位中,因此在访问它时需要对其进行移位: size_type __get_short_size() const { return __r_.first().__s.__size_ >> 1; } 同样,长字串容量的getter和setter用来__long_mask解决该is_long位。 我仍在寻找第一个问题的答案,即__min_cap对于不同的体系结构,短字符串的容量将获得什么价值? 其他标准库实现 …

1
为什么libc ++的vector <bool> :: const_reference不是bool?
第23.3.7节vector&lt;bool&gt;[vector.bool] 类的第1段规定: template &lt;class Allocator&gt; class vector&lt;bool, Allocator&gt; { public: // types: typedef bool const_reference; ... 但是,使用libc ++时,该程序无法编译: #include &lt;vector&gt; #include &lt;type_traits&gt; int main() { static_assert(std::is_same&lt;std::vector&lt;bool&gt;::const_reference, bool&gt;{}, "?"); } 此外,我注意到C ++标准在此规范中一直到C ++ 98都是一致的。而且我还要指出,自从首次引入libc ++以来,libc ++一直未遵循此规范。 这种不符合的动机是什么?

2
我应该使用libc ++还是libstdc ++?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 改善这个问题 我正在使用c / c ++为osx和linux开发命令行界面可执行文件。该项目将链接到opencv。我应该使用libc ++还是libstdc ++?

1
将libstdc ++编译的库与clang ++ -stdlib = libc ++一起使用
我在Mac OS X(10.8.2)下使用C ++进行工作,最近我提出了使用C ++ 11功能的需求,这些功能可以通过使用libc ++ stdlib的clang ++编译器获得。但是,我还需要使用一些针对libstdc ++编译并链接的旧式库(来自MacPorts)。 这样做时,我遇到了链接错误,因为使用(例如)的遗留库的标头std::string需要针对std::__1::basic_string(即libc ++实现std::string)而不是针对std::basic_string实现进行解析。 有没有办法在开发中混合这两个库(例如,通过使用一些预处理器标志?)
72 c++  c++11  clang  libstdc++  libc++ 

2
std :: chrono :: years的存储空间真的至少是17位吗?
来自cppreference std::chrono::years (since C++20) duration&lt;/*signed integer type of at least 17 bits*/, std::ratio&lt;31556952&gt;&gt; 使用libc++,它似乎的强调存储std::chrono::years就是short其中签订16位。 std::chrono::years( 30797 ) // yields 32767/01/01 std::chrono::years( 30797 ) + 365d // yields -32768/01/01 apparently UB cppreference上有错别字吗? 例: #include &lt;fmt/format.h&gt; #include &lt;chrono&gt; template &lt;&gt; struct fmt::formatter&lt;std::chrono::year_month_day&gt; { char presentation = 'F'; constexpr auto parse(format_parse_context&amp; ctx) { …
14 c++  chrono  c++20  libc++ 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.