Questions tagged «c++»

C ++是一种通用编程语言。它最初被设计为C的扩展,并且具有类似的语法,但是现在它是一种完全不同的语言。使用此标记可解决有关将要使用C ++编译器编译的代码的问题。对于与特定标准修订版[C ++ 11],[C ++ 14],[C ++ 17]或[C ++ 20]等相关的问题,请使用特定于版本的标记。

7
是否继承了静态字段?
当静态成员被继承时,它们对于整个层次结构还是整个类都是静态的,即: class SomeClass { public: SomeClass(){total++;} static int total; }; class SomeDerivedClass: public SomeClass { public: SomeDerivedClass(){total++;} }; int main() { SomeClass A; SomeClass B; SomeDerivedClass C; return 0; } 在所有这三种情况下总计为3,或者对于2为SomeClass1是SomeDerivedClass?
102 c++  inheritance  static 

2
C ++ 0x Lambda按值捕获始终是const吗?
有什么方法可以按值捕获,并使捕获的值非常量?我有一个库函子,我想捕获并调用一个非const但应该是的方法。 以下代码不会编译,但通过使foo :: operator()const可以对其进行修复。 struct foo { bool operator () ( const bool & a ) { return a; } }; int _tmain(int argc, _TCHAR* argv[]) { foo afoo; auto bar = [=] () -> bool { afoo(true); }; return 0; }
102 c++  lambda  const  c++11 


4
空引用可能吗?
这段代码是否有效(和定义的行为)? int &nullReference = *(int*)0; 这两个g ++以及铛++编译它没有任何警告,即使使用-Wall,-Wextra,-std=c++98,-pedantic,-Weffc++... 当然,该引用实际上不是null,因为无法访问它(这意味着取消引用null指针),但是我们可以通过检查其地址来检查其是否为null: if( & nullReference == 0 ) // null reference

3
是否将shared_ptr <Base>向下转换为shared_ptr <Derived>?
更新:此示例中的shared_ptr类似于Boost中的shared_ptr,但它不支持shared_polymorphic_downcast(或者对于此问题,不支持dynamic_pointer_cast或static_pointer_cast)! 我正在尝试初始化指向派生类的共享指针,而不会丢失引用计数: struct Base { }; struct Derived : public Base { }; shared_ptr&lt;Base&gt; base(new Base()); shared_ptr&lt;Derived&gt; derived; // error: invalid conversion from 'Base* const' to 'Derived*' derived = base; 到目前为止,一切都很好。我没想到C ++会将Base *隐式转换为Derived *。但是,我确实想要代码表示的功能(即在向下转换基本指针的同时保持引用计数)。我的第一个想法是在Base中提供一个强制转换运算符,以便可以隐式转换为Derived(对于pedants:我会检查向下强制转换是否有效,不用担心): struct Base { operator Derived* (); } // ... Base::operator Derived* () { return down_cast&lt;Derived*&gt;(this); } …
102 c++  gcc  boost 

6
字符串c_str()与data()
我看了几个地方那之间的区别c_str(),并data()(在STL和其他实现)是c_str()始终是NULL终止,而data()不是。据我在实际实现中看到的,它们要么执行相同的操作,要么data()调用c_str()。 我在这里想念什么?在哪种情况下使用哪个更正确?
102 c++  stl  c-str 

1
图像到ASCII艺术转换
序幕 该主题有时会在堆栈溢出中弹出,但通常由于写作问题不佳而被删除。我看到了许多这样的问题,然后在需要其他信息时从OP(通常是低声望)中保持沉默。如果输入的内容对我来说足够好,我决定回答一个答案,通常在活跃状态下每天会得到几次投票,但是几周后,该问题就被删除/删除,所有问题均从开始。所以我决定写这个问答,这样我就可以直接参考这些问题,而不必一遍又一遍地重写答案…… 另一个原因也是此meta线程也针对我,因此,如果您有其他意见,请随时发表评论。 题 如何使用C ++将位图图像转换为ASCII艺术? 一些约束: 灰度图像 使用等宽字体 保持简单(不要为初学者级程序员使用太高级的东西) 这是相关的Wikipedia页面ASCII艺术(感谢@RogerRowland)。 这里类似于ASCII Art转换问答的迷宫。

2
libc ++中短字符串优化的机制是什么?
该答案很好地概述了短字符串优化(SSO)。但是,我想更详细地了解它在实践中如何工作,特别是在libc ++实现中: 要符合SSO要求,字符串必须多短?这取决于目标体系结构吗? 访问字符串数据时,实现如何区分短字符串和长字符串?它是否像m_size &lt;= 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_ &gt;&gt; 1; } 同样,长字串容量的getter和setter用来__long_mask解决该is_long位。 我仍在寻找第一个问题的答案,即__min_cap对于不同的体系结构,短字符串的容量将获得什么价值? 其他标准库实现 …

4
在C代码中使用C ++库
我有一个C ++库,其中提供了用于管理数据的各种类。我有该库的源代码。 我想扩展C ++ API以支持C函数调用,以便该库可以与C代码和C ++代码同时使用。 我正在使用GNU工具链(gcc,glibc等),因此语言和体系结构支持不是问题。 从技术上讲不可能有什么原因吗? 我需要注意任何陷阱吗? 是否有与此相关的资源,示例代码和/或文档? 我发现的其他一些内容: 使用以下代码包装C代码需要使用的C ++标头。 #ifdef __cplusplus extern "C" { #endif // // Code goes here ... // #ifdef __cplusplus } // extern "C" #endif 将“真实的” C ++接口保留在C不包含的单独的头文件中。在这里考虑PIMPL原理。#ifndef __cplusplus #error在这里使用东西有助于发现任何疯狂。 小心C ++标识符作为C代码中的名称 C和C ++编译器之间的枚举大小不同。如果您使用的是GNU工具链,则可能不是问题,但仍然要小心。 对于结构,请遵循以下格式,以免C混淆。 typedef struct X { ... } X …
102 c++  c  gcc  glibc 


6
过滤STL容器的现代方法?
在使用了C#多年之后,我又回到C ++了,我想知道现代的方式-阅读:C ++ 11-筛选数组的方式,即如何实现类似于此Linq查询的内容: var filteredElements = elements.Where(elm =&gt; elm.filterProperty == true); 为了过滤元素向量(strings出于这个问题)? 我衷心希望现在已取代需要定义显式方法的旧STL样式算法(甚至是扩展boost::filter_iterator)。
102 c++  c++11  stl 

16
计时器功能,使用C ++以纳秒为单位提供时间
我希望计算API返回值所花费的时间。采取这种行动所花费的时间在纳秒级左右。由于该API是C ++类/函数,因此我使用timer.h来进行计算: #include &lt;ctime&gt; #include &lt;cstdio&gt; using namespace std; int main(int argc, char** argv) { clock_t start; double diff; start = clock(); diff = ( std::clock() - start ) / (double)CLOCKS_PER_SEC; cout&lt;&lt;"printf: "&lt;&lt; diff &lt;&lt;'\n'; return 0; } 上面的代码以秒为单位给出了时间。如何在纳秒内获得相同的精度?
101 c++  c  timer 

3
gcc 4.8或更早的关于正则表达式的错误吗?
我正在尝试在C ++ 11的一段代码中使用std :: regex,但是似乎该支持有点问题。一个例子: #include &lt;regex&gt; #include &lt;iostream&gt; int main (int argc, const char * argv[]) { std::regex r("st|mt|tr"); std::cerr &lt;&lt; "st|mt|tr" &lt;&lt; " matches st? " &lt;&lt; std::regex_match("st", r) &lt;&lt; std::endl; std::cerr &lt;&lt; "st|mt|tr" &lt;&lt; " matches mt? " &lt;&lt; std::regex_match("mt", r) &lt;&lt; std::endl; std::cerr &lt;&lt; "st|mt|tr" &lt;&lt; …
101 c++  regex  gcc  c++11  libstdc++ 

3
为什么简单的“ Hello World”风格的程序不能用Turbo C ++编译?
我已经开始为编程课学习C ++。我已经下载了这个“ Hello World”程序: #include &lt;iostream&gt; using namespace std; int main() { cout &lt;&lt; "Hello, World!"; return 0; } 但是Turbo C ++抱怨: Error D:\HELLO.CPP 1: Unable to open include file 'IOSTREAM' Error D:\HELLO.CPP 2: Declaration syntax error Error D:\HELLO.CPP 6: Undefined symbol 'cout' 这个非常简单的程序有什么问题?我该如何纠正这些错误?
101 c++  turbo-c++  c++-faq 

8
C ++ 11中是否存在用于基于范围的for循环的范围类?
我发现自己是在不久前写的: template &lt;long int T_begin, long int T_end&gt; class range_class { public: class iterator { friend class range_class; public: long int operator *() const { return i_; } const iterator &amp;operator ++() { ++i_; return *this; } iterator operator ++(int) { iterator copy(*this); ++i_; return copy; } bool operator ==(const …
101 c++  c++11  std 

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.