C++
文章平均质量分 79
CPP_CHEN
这个作者很懒,什么都没留下…
展开
-
Playing with ptrace, Part I
Using ptrace allows you to set up system call interception and modification at the user level.Have you ever wondered how system calls can be intercepted? Have you ever tried fooling the kern转载 2014-03-10 20:59:26 · 871 阅读 · 0 评论 -
Special member functions (copy/move constructor) - C++11, 21 of n
Copying and MovingDuring object construction (constructor), be very careful the objects referenced have been fully initialized.In constructor/destructor, pay close attention to calling "virtual原创 2013-11-16 23:39:40 · 1753 阅读 · 0 评论 -
Initialization - C++11, 20 of n
InitializationIf a given non-static data member has both a brace-or-equal-initializer and a mem-initializer, the initialization specified by the mem-initializer is performed, and the non-static原创 2013-11-16 21:33:22 · 962 阅读 · 0 评论 -
C++ auto and decltype Explained
ContentsIntroductionThe auto Keyword: The BasicsThe auto Keyword: The Rest of the StoryWhen auto Is Not a LuxuryThe decltype keyword: The BasicsHow decltype Deduces the Type of an Expression: Case转载 2013-05-31 22:02:39 · 2099 阅读 · 0 评论 -
C++ Rvalue References Explained
Last updated: March 2013ContentsIntroductionMove SemanticsRvalue ReferencesForcing Move SemanticsIs an Rvalue Reference an Rvalue?Move Semantics and Compiler OptimizationsPerfect Forwarding: T转载 2013-05-31 21:57:33 · 2511 阅读 · 0 评论 -
vector<> VS <> deque<> VS list<>
Here is the summary from an interesting performance benchmark article which comparing vector and list int C++11ConclusionTo conclude, we can get some facts about each data structure:std::l转载 2012-11-29 18:03:29 · 574 阅读 · 0 评论 -
Python performance 1 of n
If you would like to improve the running performance of Python, try1) Use profile/cProfile to benchmark your program, find the possible hotspot, switch to correct data structure to solve problem etc原创 2012-09-25 22:43:34 · 500 阅读 · 0 评论 -
clock and time - C++11, 14 of n
C++11 provides chrono library to deal with clock and time.1) Durationsstd::chrono::duration twentySeconds(20);std::chrono::duration> halfAMinute(0.5);std::chrono::duration> oneMillisecond(1);原创 2012-09-24 14:39:40 · 3833 阅读 · 0 评论 -
Concurrency 2, thread and promise - C++11, 9 of n
1) Low level interfaces:std::thread(launch::async, ...)std::promise, it enables you to provide the data (by using one of its set_...() functions) and All member functions that set the value or e原创 2012-09-23 10:57:10 · 2274 阅读 · 0 评论 -
Regex - C++11, 6 of n
1) Raw stringR"delim(...)delim", where delim is a character sequence of at most 16 basic characters except the backslash, whitespace and parentheses.2) Note regex algorithm is greedy3) Main in原创 2012-09-16 18:19:04 · 4646 阅读 · 4 评论 -
string - C++11, 5 of n
(1) Gotchasin C++98, string literals, such as 'hello', was changed to const char*. Sticktly speaking, the original type of a literal such as 'hello' is const char[6]. But this type automatically con原创 2012-09-16 11:21:55 · 1818 阅读 · 0 评论 -
Special member functions (constructor) - C++11, 16 of n
Special member functions:default constructorcopy constructorcopy assignment operatorMove constructorMove assignment operatorConstructorsA constructor can be invoked for a const, volatile o原创 2013-11-14 16:35:26 · 1217 阅读 · 0 评论 -
Conversion - C++11, 18 of n
1) Conversion Constructorstruct X { X(int); X(const char*, int =0); X(int, int);};void f(X arg) { X a = 1; // a) X b = "Jessie"; // b) a = 2; // a = X(2)原创 2013-11-16 15:10:43 · 1007 阅读 · 0 评论 -
Special member functions (copy/move assignment) - C++11, 22 of n
copy/move assignmentA user-declared copy assignment operator X::operator= is anon-static non-template member function of class X withexactly one parameter of typeX, X&, const X&, volatile原创 2013-11-17 12:12:22 · 1337 阅读 · 0 评论 -
volatile in C++
1) "volatile" has nothing to do with multiprocessing. So it is not atomic.2) In a single threaded env, "volatile int vi = 0", vi = 1; int read_back = vi; assert (read_back == 1); the assertion may f原创 2014-02-13 10:03:13 · 823 阅读 · 0 评论 -
Use unique_ptr to RAII your file objects
auto file_closer = [](int* pfd) { close(*pfd); };int fd = open("a.txt", O_WRONLY|O_CREAT, 0666);unique_ptr raii_fd (&fd, file_closer);// using fd原创 2014-01-25 16:08:33 · 710 阅读 · 0 评论 -
Making Your Next Move
This entry is part of a series, RValue References: Moving Forward»Entries in this series:Want Speed? Pass by Value.Making Your Next MoveYour Next Assignment...Exceptionally Moving!On转载 2013-12-24 15:39:34 · 858 阅读 · 0 评论 -
Want Speed? Pass by Value.
Want Speed? Pass by Value.This entry is part of a series, RValue References: Moving Forward»Entries in this series:Want Speed? Pass by Value.Making Your Next MoveYour Next Assignme转载 2013-12-24 14:06:18 · 2069 阅读 · 0 评论 -
Move semantics/theory - C++11, 26 of n
std:move() unconditionally converts an lvalue or rvalue to an rvalue.std:forward() forwards the argument passed in exactly the same type as it is. May be lvalue or rvalue (perfect forwarding).When ove原创 2013-11-18 23:57:10 · 896 阅读 · 0 评论 -
Chandler Carruth's terrified bug in GoingNative 2013
The code. 1 #include 2 #include 3 #include 4 #include 5 6 using namespace std; 7 8 class A { 9 public: 10 virtual void F() = 0; 11 void Done() { 12原创 2013-12-01 16:13:09 · 1067 阅读 · 0 评论 -
Guidelines - C++11, 25 of n
Use unique_ptr, shared_ptr, vector, string to manage resourcesReturn locals by value. Don't return by const valueExamples:const string foo() { return "foo"; } // deprecated since C++11 because i原创 2013-11-18 15:11:55 · 932 阅读 · 0 评论 -
Pay close attention to manage multiple resource in one object - C++11, 24 of n
if constructor (at any point, say in the body of constructor) throws, the object's desctructor will NEVER be invoked, because the compiler can't tell what's the state of the object under construction原创 2013-11-18 14:25:57 · 1016 阅读 · 0 评论 -
Inheritance is the base class of evil (Sean Parent)
#include #include #include #include #include using namespace std;templatevoid draw(const T& x, ostream& out, size_t pos) { out }class object_t {public: template原创 2013-11-18 11:42:51 · 1182 阅读 · 0 评论 -
Inheriting constructors - C++11, 23 of n
Inheriting constructorsusing-declaration that names a constructor implicitly declaresa set of inheriting constructors. The candidate set of inherited constructors from the class X named in the原创 2013-11-17 14:51:49 · 1203 阅读 · 0 评论 -
IO Stream
1) The class hierarchy. basic_stringbuf is the heart of the IOStream of STLDesign: The IOStream library is designed with a rigid separation of responsibilities.(a) The classes derived from basic原创 2012-09-16 18:59:09 · 1190 阅读 · 0 评论 -
Random - C++11, 7 of n
Since C++11, the C++ standard library provides a random-number library. The library provides many well-known distributions, and in addition, it provides multiple engines, which are the sources of rand原创 2012-09-18 11:48:47 · 2987 阅读 · 0 评论 -
Remove elements while looping the containers
Gotchas: When removing elements from containers, be careful not to saw off the branch on which you are sitting.There is a big danger that you will remove an element to which your iterator is refer原创 2012-09-15 10:01:07 · 530 阅读 · 0 评论 -
On the Superfluousness of std::move - Scott Meyers
During my presentation of "Universal References in C++11" at C++ and Beyond 2012, I gave the advice to apply std::move to rvalue reference parameters and std::forward to universal reference parame转载 2012-11-27 17:19:26 · 816 阅读 · 0 评论 -
smart pointers - C++11, 15 of n
The smart pointers provided by C++11 is straight forward enough. So just providing the interface here for reference.1) shared_ptr2) weak_ptrLow level interfaces3) unique_ptr原创 2012-09-24 15:26:03 · 1259 阅读 · 0 评论 -
ratio - C++11, 13 of n
C++11 provides ratio lib to specify compile-time fractions and to perform compile-time arithmetic with them.1) The definitiontemplate class ratio {public: typedef ratio type; stati原创 2012-09-23 21:33:21 · 1992 阅读 · 0 评论 -
Concurrency 5, atomics - C++11, 12 of n
1) The high level interfacesFootnote: compare_exchange_strong's implementation pseudocode :bool compare_exchange_strong (T& expected, T desired){ if (this->load() == expected) {原创 2012-09-23 16:48:19 · 1352 阅读 · 0 评论 -
Concurrency 4, condition_variable - C++11, 11 of n
1) condition_variableCalled without the predicate, both wait_for() and wait_until() return the following enumeration class values:std::cv_status::timeout if the absolute timeout happenedstd:原创 2012-09-23 15:56:24 · 1635 阅读 · 0 评论 -
Concurrency 3, mutex and lock - C++11, 10 of n
1) The mutex and lock2) The lock_guard3) The unique_lock4) call_onceclass X {private: mutable std::once_flag initDataFlag; void initData() const;public: data getDat原创 2012-09-23 15:20:17 · 1599 阅读 · 0 评论 -
Concurrency 1, async and future - C++11, 8 of n
1) High level interfaces:async() provides an interface to let a piece of functionality, a callable object run in the background as a separate thread, if possible.Class futureExample:#inclu原创 2012-09-23 10:20:49 · 2227 阅读 · 0 评论 -
Function Adapters and Binders - C++11, 4 of n
A function adapter is a function object that enables the composition of function objects with each other, with certain values, or with special functions.Function adaptors provided by C++11.1) Th原创 2012-09-14 23:05:33 · 1250 阅读 · 0 评论 -
iterator adaptors - insert iterators
Three different insert iteratorsThe trick Operations:Implementations of insert iterators usually use the following two-step trick:1) Operator * is implemented as a no-op that simply return原创 2012-09-14 11:30:51 · 457 阅读 · 0 评论 -
Suggestion for using "auto" from Herb Sutter
Short answer: More completely, my current opinion on auto is that you should useauto by default unless you explicitly want a conversion. (Slightly more precisely, "... unless you want to explicitly co转载 2013-01-03 19:38:08 · 484 阅读 · 0 评论 -
shared_ptr enable_shared_from_this - C++11, 3 of n
#include struct S: enable_shared_from_this{};Don't do this:S *p = new S;shared_ptr sp2 = p->shared_from_this(); // throws std::bad_weak_refDo this:shared_ptr p(new S);shared_ptr s原创 2012-09-03 00:14:36 · 1447 阅读 · 0 评论 -
Case ignore compare strings
Solution 1: strcasecmp#include // for strcasecmp#include strcasecmp(s1.c_str(), s2.c_str())Solution 2: equal algorithm +lambda#include #include #include equal(s1.cbegin(), s1.cend()原创 2012-09-15 20:12:20 · 1420 阅读 · 0 评论 -
Predicates
Gotchas (Effective STL also mentions this gotcha):1) Predicates should be always stateless.2) The operator() member function should be always constclass Nth { // function object that returns t原创 2012-09-14 22:17:48 · 574 阅读 · 0 评论