Questions tagged «c++»

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

2
iterator-> second是什么意思?
在C ++中,a的类型是std::map<>::iterator什么? 我们知道it类型的对象std::map<A,B>::iterator有一个重载operator ->,它返回a std::pair<A,B>*,并且std::pair<>有一个firstand second成员。 但是,这两个成员对应什么,为什么我们必须以as的形式访问映射中存储的值it->second?
157 c++  stl  iterator 

7
使用std :: string的printf?
我的理解是,它string是std名称空间的成员,那么为什么会发生以下情况? #include <iostream> int main() { using namespace std; string myString = "Press ENTER to quit program!"; cout << "Come up and C++ me some time." << endl; printf("Follow this command: %s", myString); cin.get(); return 0; } 每次程序运行时,都会myString打印一个看似随机的3个字符的字符串,例如在上面的输出中。
157 c++  string  namespaces  printf  std 

2
C ++继承-无法访问的基础?
我似乎无法使用基类作为函数参数,是否搞砸了继承? 我的主要内容如下: int some_ftn(Foo *f) { /* some code */ }; Bar b; some_ftn(&b); Bar类以这种方式从Foo继承: class Bar : Foo { public: Bar(); //snip private: //snip }; 这不行吗?我似乎无法在我的主要功能中拨打电话
157 c++  inheritance 

6
在Lambda中移动捕获
如何在C ++ 11 lambda中通过移动(也称为右值引用)捕获? 我正在尝试写这样的东西: std::unique_ptr<int> myPointer(new int); std::function<void(void)> example = [std::move(myPointer)]{ *myPointer = 4; };


8
为什么C ++库和框架从不使用智能指针?
我读过几篇文章,几乎不应该使用原始指针。相反,它们应始终包装在智能指针中,无论是作用域指针还是共享指针。 但是,我注意到Qt,wxWidgets之类的框架以及Boost之类的库从不返回也不期望有智能指针,就好像它们根本没有使用它们一样。相反,它们返回或期望原始指针。有什么理由吗?编写公共API时,我应该远离智能指针吗?为什么? 只是想知道为什么在许多大型项目似乎都避免使用智能指针的情况下建议使用智能指针。

7
std :: enable_if有条件地编译成员函数
我试图通过一个简单的示例来了解如何使用std::enable_if。在阅读完此答案后,我想出一个简单的例子应该不难。我想使用std::enable_if两个成员函数之间进行选择,并只允许使用其中之一。 不幸的是,以下代码无法在gcc 4.7中进行编译,经过数小时的尝试,我一直在问你们我的错误是什么。 #include <utility> #include <iostream> template< class T > class Y { public: template < typename = typename std::enable_if< true >::type > T foo() { return 10; } template < typename = typename std::enable_if< false >::type > T foo() { return 10; } }; int main() { Y< …
156 c++  templates  g++  c++11 


14
是什么使Scala的运算符重载“好”,而C ++的“坏”?
许多人认为C ++中的运算符重载是一个坏东西(tm),并且是一个错误,不要在较新的语言中重复出现。当然,这是设计Java时专门删除的一项功能。 既然我已经开始阅读Scala,我发现它看起来非常类似于运算符重载(尽管从技术上讲,它没有运算符重载,因为它没有运算符,只有函数)。但是,它似乎与C ++中的运算符重载在质量上没有什么不同,在C ++中,我记得运算符被定义为特殊函数。 因此,我的问题是什么使Scala中定义“ +”的想法比C ++中的想法更好?


7
将一个向量复制到另一个向量的快速方法
我更喜欢两种方式: void copyVecFast(const vec<int>& original) { vector<int> newVec; newVec.reserve(original.size()); copy(original.begin(),original.end(),back_inserter(newVec)); } void copyVecFast(vec<int>& original) { vector<int> newVec; newVec.swap(original); } 你怎么做呢?
155 c++  algorithm  stl 

10
C ++中的dynamic_cast和static_cast
我dynamic_cast对C ++中的关键字非常困惑。 struct A { virtual void f() { } }; struct B : public A { }; struct C { }; void f () { A a; B b; A* ap = &b; B* b1 = dynamic_cast<B*> (&a); // NULL, because 'a' is not a 'B' B* b2 = …
155 c++  dynamic-cast 

3
何时使用std :: forward转发参数?
C ++ 0x显示了使用示例std::forward: template<class T> void foo(T&& arg) { bar(std::forward<T>(arg)); } 何时总是有利于使用std::forward? 另外,它要求&&在参数声明中使用,是否在所有情况下均有效?我以为如果在函数中声明了函数,则必须将临时函数传递给函数&&,因此可以用任何参数调用foo吗? 最后,如果我有这样的函数调用: template<int val, typename... Params> void doSomething(Params... args) { doSomethingElse<val, Params...>(args...); } 我应该用这个代替吗: template<int val, typename... Params> void doSomething(Params&&... args) { doSomethingElse<val, Params...>(std::forward<Params>(args)...); } 另外,如果在函数中使用两次参数,即同时转发到两个函数,使用它是否明智std::forward?不会std::forward将同一事物转换为临时对象两次,从而移动内存并使之无效以再次使用吗?下列代码可以吗: template<int val, typename... Params> void doSomething(Params&&... args) { doSomethingElse<val, Params...>(std::forward<Params>(args)...); doSomethingWeird<val, Params...>(std::forward<Params>(args)...); …

3
为什么使用“ b <a?a:b”而不是“ a <b?b:a”以实现最大模板?
C ++模板-《完整指南,第二版》介绍了max模板: template&lt;typename T&gt; T max (T a, T b) { // if b &lt; a then yield a else yield b return b &lt; a ? a : b; } 它解释了使用“b &lt; a ? a : b”代替“a &lt; b ? b : a”: 请注意,根据[StepanovNotes]的max()模板有意返回“ b &lt;a?a:b”而不是“ a &lt;b?b:a”,以确保即使两个值相等但不相等,该函数也能正确运行。 如何理解“ …
154 c++  templates 

12
为什么我们需要C ++中的纯虚拟析构函数?
我了解需要虚拟析构函数。但是为什么我们需要一个纯虚拟析构函数?在一篇C ++文章中,作者提到了当我们要使类抽象时,我们使用纯虚拟析构函数。 但是我们可以通过将任何成员函数设为纯虚函数来使类抽象。 所以我的问题是 我们什么时候才能真正使析构函数成为纯虚拟的?有人可以举一个很好的实时例子吗? 当我们创建抽象类时,将析构函数也设置成纯虚拟的是一种好习惯吗?如果是..那为什么呢?

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.