c/c++
cuiyong_cn
这个作者很懒,什么都没留下…
展开
-
C/C++长度为0的数组
目录编译时静态检测奇怪的问题其他用法编译时静态检测利用长度为0的数组可以实现编译时静态检测, 例如#define STATIC_CHECK(expr) { char unnamed[(expr) ? 1 : 0]; }template <class To, class From>To safe_reinterpret_cast(From from){ STATIC...原创 2019-03-07 14:06:19 · 1214 阅读 · 0 评论 -
inline functin vs #define
Why should I use inline functions instead of plain old #define macros?Unlike #define macros, inline functions avoid infamous macro errors since inline functions always evaluate every argument exactly...转载 2019-06-26 22:49:51 · 138 阅读 · 0 评论 -
difference between 'typedef' and 'using' in C++11
文章目录What is the difference between 'typedef' and 'using' in C++11Interesting pointsConclusionWhat is the difference between ‘typedef’ and ‘using’ in C++11Apart from ‘using’ can be used within templa...原创 2019-06-26 22:47:37 · 141 阅读 · 0 评论 -
error: expected unqualified-id before 'xxx'
发生了什么看如下代码class A{public: void do() {}};这会引起GCC报错: error: expected unqualified-id before 'do'解释通常 expected unqualified-id before 这个错误通常是因为语法错误引起的, 如上一个语句没有用分毫结尾之类的. 这个也不例外, 原因就是 do是关键字, ...原创 2019-07-01 20:25:37 · 59605 阅读 · 0 评论 -
error 'xxx' is an inaccessible base of 'yyy'
又发生了什么看如下代码class VisibilityTest{public: virtual void doIt() { std::cout << "Base\n"; }};class DVisibilityTest : private VisibilityTest{private: virtual void doIt() override { st...原创 2019-07-01 20:24:13 · 1786 阅读 · 0 评论 -
友元类和友元函数
文章目录Friend class and function in C++Friend classFriend function注意事项Friend class and function in C++Friend classFriend Class. 友元类可以是另一个类访问当前类的私有数据和方法. 如下例:class Node{private: int key; Node *n...原创 2019-06-17 21:31:40 · 848 阅读 · 0 评论 -
Common C++ Error Messages : Undefined reference
文章目录Common C++ Error Messages : Undefined reference简述编译基础哪些情况会触发该错误总结Common C++ Error Messages : Undefined reference简述我们编译代码时经常会遇到这个错误, 其实这个错误是连接器触发的. 为了解决这个问题我们需要知道一些基础编译基础我们的代码编译大致分2部. 编译和链接通常...原创 2019-06-10 20:21:00 · 227 阅读 · 0 评论 -
Are Flexible Array Members valid in C/C++
文章目录Are Flexible Array Members valid in C/C++Flexible Array Members 是什么?有什么用注意事项Are Flexible Array Members valid in C/C++Flexible Array Members 是什么?我们在浏览代码时, 会见到如下代码:struct foo{ int length; ...原创 2019-06-10 20:19:33 · 211 阅读 · 0 评论 -
Multiple and Virtual Inheritance
转 Inheritance — Multiple and Virtual Inheritance文章目录转 [Inheritance — Multiple and Virtual Inheritance][1]Things you have to consider when you make design decisionsWhat does it mean to “delegate to a ...转载 2019-06-18 21:48:12 · 165 阅读 · 0 评论 -
const variale vs #define
文章目录Why should use const variable other than #define?Why should use const variable other than #define?The things you may consider are as followings:const variable obey the language’s scoping rules...原创 2019-06-24 21:16:13 · 79 阅读 · 0 评论 -
Difference between private, public, and protected inheritance
文章目录Difference between private, public, and protected inheritanceMore elaborate explainationIntresting pointsDifference between private, public, and protected inheritanceFirst, let’s talk about the ...原创 2019-06-24 21:17:08 · 176 阅读 · 0 评论 -
理解c++11中的static_assert
文章目录是什么?c++11之前的日子#error的问题简单的 static_assert 使用范例static_assert 相较于 #error 的优势使用范围是什么?static_assert简单来说就是在编译时进行断言判断. 如果条件不满足, 编译停止并输出指定错误信息.语法:static_assert(constant_expression, string_literal); ...原创 2019-08-07 23:25:45 · 419 阅读 · 0 评论 -
Call of Overloaded Function is ambiguous
error: Call of Overloaded Function is ambiguous看例子吧#include<iostream>using namespace std;int sum(int a,int b){ return a+b;}int sum(float a, float b){ return a+b;}int main(){ ...原创 2019-07-26 22:58:21 · 11957 阅读 · 3 评论 -
auto_ptr vs unique_ptr
auto_ptr and unique_ptrThe new type std::unique_ptr is introduced in c++11, and supposed to be a replacement for std::auto_ptr.But think this, if it is a direct replacement, why give it a new name ...原创 2019-07-26 23:00:18 · 189 阅读 · 0 评论 -
SIGPIPE and EPIPE
SIGPIPE and EPIPESIGPIPE 是如下情况引起的 (这里只是一个例子)grep "pattern" < reallyhugefile | headgrep 有可能会输出上百万行, 但是 head 只需要读取10行就会退出. 一旦 head 将管道的读端关闭, 那么 grep 就会获得 SIGPIPE 信号, 然后被强制退出, 使其节约资源.如果不想自己的程序因为这...原创 2019-07-20 22:06:17 · 1371 阅读 · 0 评论 -
error: invalid static_cast from type 'xxx*' to type 'yyy*'
文章目录error: invalid static_cast from type 'xxx*' to type 'yyy*'[What good is static_cast?][1]error: invalid static_cast from type ‘xxx*’ to type ‘yyy*’通常来说, static_cast 不适用于不同指针类型之间的转换, 因为它们是完全不同的两个类...原创 2019-07-20 21:58:08 · 13469 阅读 · 0 评论 -
Decorator Pattern
文章目录Decorator Pattern适用范围Decorator Pattern用图来表示适用范围动态的为单个对象实例添加新特性而不干扰其他对象实例通过子类的方式来实现拓展变得不实际的情况下...原创 2019-07-14 22:14:26 · 145 阅读 · 0 评论 -
In-class Initialization
文章目录Non-static Data Member InitializersISO C++ forbids in-class initialization of non-const static member[Why I can't initialize static data members in class?][1]C++03 9.4.2 Static data membersWhat ar...原创 2019-07-09 21:28:46 · 1303 阅读 · 0 评论 -
Name mangling in C++
文章目录Name mangling in C++Name mangling in C++Mangling is simply how the compiler keeps the linker happy.In C, you can’t have two functions with the same name, no matter what. So that’s what the link...原创 2019-06-24 21:18:17 · 177 阅读 · 0 评论 -
#include directive
文章目录The #include Directive#include ``#include "file"#include anything elsedifference between #include `` and #include “filename”#include ``#include "filename"What if you want to reuse some files that ...原创 2019-06-18 21:46:20 · 330 阅读 · 0 评论 -
Multiple Inheritance Considered Useful
转 Multiple Inheritance Considered Useful这篇博文较长,需要耐心看完Multiple Inheritance Considered UsefulBy Jack W. Reeves, February 01, 2006Arguments against multiple inheritance range from the philosophical t...转载 2019-06-13 21:54:10 · 656 阅读 · 0 评论 -
warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
文章目录ProblemBasic meaning and syntaxConstant expressionsSo when do I actually have to use `constexpr`?When can I/should I use both, const and constexpr together?Fixing the problemProblemIf you ever w...原创 2019-04-22 20:14:22 · 2865 阅读 · 0 评论 -
Pure virtual destructor in C++
文章目录Can a destructor be pure virtual in C++?WarningAnother peculiar thingCan a destructor be pure virtual in C++?标准c++允许纯虚构函数的存在, 但是前提是必须提供定义. 这个就有点矛盾. 纯虚函数还要定义? 原因因为子类的虚函数是按逆序执行的, 最后肯定会调用基类的虚构函数, 如...原创 2019-04-17 22:55:53 · 283 阅读 · 0 评论 -
error: expected type-specifier before 'ClassName'
什么情况如果写出如下代码// a.cppclass A{public: A(int h = 0) : height(h) {}private: int height;};// main.cppint main(int argc, char* argv[]){ A a; return 0;}gcc编译, 你就会碰到error: expected type-spec...原创 2019-04-12 21:45:31 · 15465 阅读 · 1 评论 -
passing 'const xxx ' as 'this' argument discards qualifiers [-fpermissive]
文章目录什么情况原因什么情况如果写出如下代码class A{public: A(int h = 0) : height(h) {} int getHeight() { return height; }private: int height;};int main(int argc, char* argv[]){ const A a; int height = a.ge...原创 2019-04-11 23:09:58 · 11302 阅读 · 1 评论 -
Incomplete type is not allowed
问题如果碰到编译器报该错误, 基本上是没有加正确的头文件. 造成该错误的原因是, 代码中只有类型声明, 但是没找到真实定义, 就会报该错误.原创 2019-03-27 00:58:55 · 15811 阅读 · 0 评论 -
To Kill A Singleton
[转] To Kill A Singleton文章目录The All-Important DestructorImplicit DestructionNothing's PerfectOdds And SodsThe Singleton pattern is remarkably simple. Its intent states, Ensure a class only has one in...转载 2019-03-24 00:12:23 · 231 阅读 · 0 评论 -
Ellipsis (and why to avoid them)
[转] Ellipsis (and why to avoid them)文章目录An ellipsis exampleWhy ellipsis are dangerous: Type checking is suspendedWhy ellipsis are dangerous: ellipsis don’t know how many parameters were passedMethod ...转载 2019-03-22 22:08:51 · 474 阅读 · 0 评论 -
Why can't a static member function have a cv-qualifier?
问题如果你写出了如下代码class A{public: static void foo() const { }};那么编译会报: static member function ‘static void A::foo()’ cannot have cv-qualifier.为什么c++标准了解一下:A static member function does not have ...原创 2019-03-20 16:19:54 · 243 阅读 · 0 评论 -
RValue Reference in C++
(转)RValue Reference文章目录IntroductionMove SemanticsRvalue ReferencesForcing Move SemanticsIs an Rvalue Reference an Rvalue?Move Semantics and Compiler OptimizationsPerfect Forwarding: The ProblemPerfec...转载 2019-04-18 21:08:47 · 444 阅读 · 0 评论 -
Variadic templates in C++
转Variadic templates in C++文章目录IntroVariadic templatesBasic exampleSome simple variationsPerformanceType-safe variadic functionsVaridic data structuresVariadic templates for catch-all functionsVariadi...转载 2019-05-04 21:22:29 · 452 阅读 · 0 评论 -
error use of deleted function in c++
怎么触发的在做virtual inheritance测试的时候, 如下代码会触发:class DiamondBase{public: DiamondBase(int at) : m_attack(at) { } virtual void bark() = 0;private: int m_attack;};class DiamondLeft : publi...原创 2019-06-13 21:51:47 · 19721 阅读 · 0 评论 -
casts in c++
转载When should static_cast, dynamic_cast, const_cast and reinterpret_cast be used?How do you explain the differences among static_cast, reinterpret_cast, const_cast, and dynamic_cast to a new C++ pro...转载 2019-05-27 20:19:05 · 333 阅读 · 0 评论 -
Why class member function template can not be virtual in c++
转Why class member function template can not be virtual in c++文章目录A little backgroundWhat's the difference between how virtual and non-virtual member functions are called?ExplanationA little backgrou...转载 2019-05-10 22:52:10 · 596 阅读 · 0 评论 -
c++11 enum class
文章目录c++11中新的枚举c++11中新的枚举c++11 中引入了enum class, 相对于传统的enum. 克服了以下传统问题:传统enum可隐式转换为int, 对不想如此的编程人员会造成错误传统enum会将其范围提升为全局, 可能会造成名字冲突传统enum底层类型无法指定, 造成误解, 兼容性问题和不能前向声明简单例子: enum Level { ...原创 2019-05-10 21:52:34 · 504 阅读 · 0 评论 -
c++11 specifier: override or final
文章目录override specifierfinal specifierInteresting pointsoverride specifieroverride是C++11 引入的修饰符. 它最重要的2个作用:它告诉我们, 这个方法是虚函数, 我们正在重载基类的虚函数它让编译器去检查是否真的在重载虚函数, 而不是新增成员函数例子class B{public: virt...原创 2019-05-19 21:22:09 · 307 阅读 · 0 评论 -
Linux Daemon Writing HOWTO
文章目录Linux Daemon Writing HOWTOIntroduction: What is a Daemon?Getting StartedPlanning Your DaemonWhat Is It Going To Do?How Much Interaction?Basic Daemon StructureForking The Parent ProcessChanging The...转载 2019-05-08 20:40:56 · 171 阅读 · 0 评论 -
std::addressof的实现理解
文章目录std::addressof的实现怎么理解std::addressof的实现标准库中有一个std::addressof, 这个东西存在的目的是当存在operator&的重载时, 依然能够获得变量的地址. gcc(4.7.1)下的实现如下:template<typename __Tp>inline __Tp* __addressof(_Tp& __r) ...原创 2019-04-29 21:30:13 · 3918 阅读 · 1 评论 -
Conert a string to lowercase in c++
文章目录Using ranged for loopusing std::for_eachusing std::transformUsing ranged for loopchar toLowerCase(char c){ if (c >= 'A' && c <= 'Z') { return c + 32; } return c;}std::stri...原创 2019-08-11 19:30:27 · 543 阅读 · 0 评论