Compiling Error: error C2664: 'void TestFun01(std::string &)': cannot convert argument 1 from 'const char [5]' to 'std::string &' Solution: add const to std::string& which is a parameter of function, like this: void TestFun01(const std::string& text) { std::cout << text; } void TestFun02() { TestFun01("abcd"); } this would produce compilation error: void TestFun01(std::string& text) { std::cout << text; } void TestFun02() { TestFun01("abcd"); } 人,越有智慧越显得孤独苦恼。

Continue reading

[C++]C++11 shared_ptr 与 weak_ptr 区别

shared_ptr 语法: #include <memory> shared_ptr<A> x(new A); shared_ptr 相当于 对象引用计数器。每当对 shared_ptr 赋值操作一次,则其引用对象的计数+1。当某对象的引用计数为0时,则该对象自动销毁。 weak_ptr 语法: #include <memory> weak_ptr<A> x(new A); weak_ptr 典型应用是缓存:例如我们在缓存中存放了一个 raw pointer 来指向某个对象,如果这个对象在其他地方被销毁了,那么缓存中的这个 raw pointer 指向的对象不存在。如果我们希望某个对象在其他地方被销毁时,缓存中指向该对象的指针也马上被置为 null,那么就可以使用 weak_ptr。 参考自: shared_ptr and weak_ptr differences https://stackoverflow.com/questions/4984381/shared-ptr-and-weak-ptr-differences When is std::weak_ptr useful? https://stackoverflow.com/questions/12030650/when-is-stdweak-ptr-useful 我希望我的文字,是一场一场的梦,是一阵一阵的风,是一片一片的月光。那些生活于尘土中的人们,那些在四季轮回中迷失了方向的人们,那些在大地的收货和欠收中痛苦和欣喜的人们,他们会有一个朝上仰望的这样一颗心灵。如果文学还能做什么,那么,文学需要承载大地上所有的苦难和沉重,让人们抬起头来,朝着云端去望,朝着树叶去望。这就是文学唯一能给我们的一点安慰。----刘亮程

Continue reading

keywords:C++ 非静态成员函数作为回调函数并实现继承多态 Base.hpp #pragma once class Base { public: virtual void TestFun1(int Param) {} virtual void TestFun2(int Param) {} }; Child.hpp #pragma once #include <iostream> #include "Base.hpp" class Child : public Base { public: void TestFun1(int Param) override { printf("Fun1 : %d\n", Param); } void TestFun2(int Param) override { printf("Fun2 : %d\n", Param); } }; EventManager.h // Fill out your copyright notice in the Description page of Project Settings.

Continue reading

keywords:C++ 用索引删除 std::vector 中的数组元素 To delete a single element, you could do: std::vector<int> vec; vec.push_back(6); vec.push_back(-17); vec.push_back(12); // Deletes the second element (vec[1]) vec.erase(vec.begin() + 1); Or, to delete more than one element at once: // Deletes the second through third elements (vec[1], vec[2]) vec.erase(vec.begin() + 1, vec.begin() + 3); 参考自:How do I erase an element from std::vector<> by index? https://stackoverflow.com/questions/875103/how-do-i-erase-an-element-from-stdvector-by-index 无论精神多么独立的人,感情却总是在寻找一种依附,寻找一种归宿。---路遥《平凡的世界》

Continue reading

keywords:匿名类,匿名结构体、构造函数、析构函数、Lambda 为匿名类添加构造函数与析构函数,有两种方式: C++98中在匿名类内部加一个命名类 C++11 Lambda语法 C++98 C++98中,可以在匿名类内部放一个命名类(named class ),然后再为命名类添加构造和析构函数,当匿名类构造或析构时,就会去调用命名类的构造函数和析构函数。 #include <iostream> #include <cmath> int main() { struct { struct S { double a; int b; S() : a(sqrt(4)), b(42) { std::cout << "constructed" << std::endl; } ~S() { std::cout << "destructed" << std::endl; } } s; } instance1, instance2; std::cout << "body" << std::endl; } C++11 Lambda #include <iostream> #include <cmath> int main() { struct { double a { sqrt(4) }; int b { []{ std::cout << "constructed" << std::endl; return 42; }() }; } instance1, instance2; } 参考 How to add constructors/destructors to an unnamed class?

Continue reading

[C++]How to use erase of std map correctly

Origin Text: http://www.cnblogs.com/graphics/archive/2010/07/05/1771110.html #include <iostream> #include <map> #include <string> using namespace std ; int main(void) { map<int, string> m ; m.insert(pair<int, string>(1, "abc")) ; m.insert(pair<int, string>(2, "def")) ; m.insert(pair<int, string>(3, "def")) ; m.insert(pair<int, string>(4, "ghi")) ; map<int, string>::iterator itor ; // Print m map<int, string>::const_iterator citor ; for (citor = m.begin(); citor != m.end(); ++citor) { cout << citor->first << ":" << citor->second << endl ; } return 0 ; } Wrong way 1st: for (itor = m.

Continue reading

Author's picture

Neil Wang

久长唯有品格

To Be Marvelous

Yichang·Hubei