Git Product home page Git Product logo

cplusplusthings's Introduction

Hi,I'm Light-City

I ❤️ Back-end Development!

💻 A Back-end Engineer, currently based in ShenZhen at Tencent.

🖖 I put mostly of my focus on back-end develpoment with Go/C++.

✍️ I Love write technical articles, you can visit my websites.

⚡ Technologies

Go C++ Java Python JavaScript HTML5 CSS3 MongoDB Redis ElasticSearch GraphQL MySQL Google Cloud Git GitHub GitLab

light-city's github stats light-city's top langs

🌎 Find me

  • wechat Official Account: search guangcity📹 ✍🏾
  • blog: click geek-guangcheng)🏓

wechat

🌎 Visitors

Visitor Badge

cplusplusthings's People

Contributors

aurelius84 avatar ccwanggl avatar chungzh avatar daidai21 avatar dangwi avatar falling-in-w-sweetty avatar imba-tjd avatar jackwener avatar knight-zxw avatar l-super avatar laialaodi avatar light-city avatar linbo0518 avatar mayerui avatar ppdog0 avatar pwjworks avatar salutdamour avatar slk000 avatar stoody-dev avatar techkang avatar tomzhang avatar tracyxiong1 avatar walterzhaojr avatar xliu79 avatar yanbinghu avatar youngquan avatar zgdgod avatar zhangm365 avatar zhkgo avatar zooltd avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cplusplusthings's Issues

C++

c++ learning

i have this error when debugging my program : terminate called after throwing an instance of 'std::out_of_range' what(): basic_string::at: __n (which is 51) >= this->size() (which is 50)

#include
#include
#include
#include

using namespace std ;

int main()
{
string alphabet {"abcdefghijklmnopqrstuvwxyzABCDEFGHIKLMNOPQRSTUVWXYZ"};
string key {"XZNLWEBGJHQDYVTKFUOMPCIASRxznlwebgjhqdyvtkfuompciasr"};

string secret_message{} ;

cout << " plaese enter your messaage : "<< endl;
getline( cin, secret_message );

string encrypted_message {} ;

cout << "encrypting message .... " <<endl; 

for (char c : secret_message ) 
{
    size_t postion = alphabet.find(c);
    
    if ( postion != string :: npos )
        {
            char  new_char { key.at(postion) } ; 

            encrypted_message += new_char ; 
        }
        else    
            {
            encrypted_message += c ; 
            }
}
cout << " your encrypted message is : " << encrypted_message << endl;

//decrypting the message 
    string decrypted_message {} ;

cout << "\n decrypting the message..... " <<endl;

for (char c : secret_message )
{
    size_t postion = key.find(c);
    
    if ( postion != string::npos)
    {
        char new_char { alphabet.at(postion)} ; // the debugger mark here 
        decrypted_message += new_char;
        
        }
        else 
        {
            decrypted_message += c ;
        }
        
}
cout << " \n decrypted message is : " << decrypted_message << endl;

cout << endl;

return 0;

}

inline中代码问题

inline那些事中 --- 1.类中内联 --- 下的代码中 定义即隐式内联函数 后花括号 后没有 ;
但是我在代码中测试 不论有无;均不会报错, 这个;在此处的作用 类似c中的 _nop_ 是一个空指令吗?
望解答,谢谢

class A
{
public:
    void f1(int x); 

    /**
     * @brief 类中定义了的函数是隐式内联函数,声明要想成为内联函数,必须在实现处(定义处)加inline关键字。
     *
     * @param x
     * @param y
     */
    void Foo(int x,int y) ///< 定义即隐式内联函数!
    {

    };
    void f1(int x); ///< 声明后,要想成为内联函数,必须在定义处加inline关键字。  
};

enum那些事

关于解决作用域不受限带来的命名冲突的经典做法,“这里使用结构体而非类......”其中第二点好像有点问题,这是在C++中,是可以有函数的。

sizeof那些事,原则6

我在64位编译器debug,输出A,B,C的大小分别为8,8,32。 当我把class C : virtual public A, virtual public B 改成class C : A, B 时输出为8,8,16 。 有没有大神解答一下为什么啊 ?

这里的注释部分写错了吧

Base ptr; Derived d; Base *pt = new Derived(); // 基类指针指向派生类实例 Base &pp = ptr; // 基类引用指向基类实例 Base &p = d; // 基类引用指向派生类实例 cout<<"基类对象直接调用"<<endl; ptr.fun1(); cout<<"基类引用指向派生类实例"<<endl; pp.fun1(); cout<<"基类指针指向派生类实例并调用虚函数"<<endl; pt->fun1(); cout<<"基类引用指向基类实例并调用虚函数"<<endl; p.fun1();

关于sizeof原则2,运行结果不一样

sizeof那些事,原则2
这是我复制下去的代码:
`#include
using namespace std;
class A
{
public:
char b;
virtual void fun() {};
static int c;
static int d;
static int f;
};

int main()
{
/**
* @brief 16 字节对齐、静态变量不影响类的大小、vptr指针=8
*/
A a;
cout<<"A size:"<<sizeof(A)<<endl;
cout<<"a size:"<<sizeof(a)<<endl;
return 0;
}`
我的运行结果并不是16,而是8:
image

求大佬讲解一下是什么原因。
运行环境 :win10 + g++编译器 + inter i7

English?

English translation please :)

关于 inline 介绍中的遗漏

页面链接

语义上,拥有外部链接的 inline 函数允许多个翻译单元(链接之前分别编译的内容,多数时候一个源文件对应一个翻译单元)同时有该函数的定义,只要这些定义等同。一个函数是否被内联是在标准中没有语义区别。

现在的有些编译器在开优化的时候不会在意 inline ,从而 inline 的作用更多是“允许多个翻译单元中的各一个定义”。 C++17 中的 inline 变量也是如此。

虚函数是否内联在有的 ABI 上会存在影响,参考此处

另外目前缺少 inline namespace 的介绍。

sizeof

sizeof 在Windows和Linux下是不是有一些不一样,在派生类虚继承多个虚函数中,在Windows得到的结果是8, 8, 32

const那些事的问题

再介绍常指针和指向常量的指针那里,有些含糊不清,半天抓不住要领,应该直接说明实质,如:常指针 是指针指向的位置不能改变,也就是指针的指只能赋值一次。指向常量的指针 是指指针指向的对象不能改变,也就是说不能通过这个指针来改变指向对象的指,而指针自身的指向是可以改变的。

关于 const 与常量的关系存在的错误与遗漏

页面链接

const常量与#define宏定义常量的区别:const常量具有类型,编译器可以进行安全检查;#define宏定义没有数据类型,只是简单的字符串替换,不能进行安全检查。

此处的错误在于 #define 定义的宏常量(假设它不是花括号初始化器列表)同样存在类型。
例如若写 #define FOURTY_TWO 42 ,则 FOURTY_TWO 的类型是 int 。具体的类型和各种字面量(整数、浮点、用户定义等)和运算符的结果类型有关。

const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是像#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干个拷贝。

此处的错误在于,若用 const 定义常量(类型为整数或枚举,必须以常量表达式初始化),则这种常量在非 odr 式使用(粗略来说是只使用其值)时不需要依赖其身为变量的身份,一定场合下甚至可以不需要定义(譬如作为类的 static 成员对象)。
编译器在作为常量处理它时,不会依赖“一份定义”,而是像是立即数一样使用它,它本身可能在机器码中被“拷贝”到多个地方,和 #define 定义的宏常量的结果相同。
另一方面, const 定义的常量由于是整数或枚举,所以直接变成机器码上的立即数往往性能更好。

最后是遗漏的一点:

const 定义的变量只有类型为整数或枚举,且以常量表达式初始化时才能作为常量表达式。其他情况下它只是一个 const 限定的变量,不要将与常量混淆。

关于sizeof中的字节对齐的疑问

原则2中,如果存在虚函数,则sizeof(A)为16

#include<iostream>
using namespace std;
class A
{
    public:
        char b;
        virtual void fun() {};
};

int main()
{
    /**
     * @brief 16  字节对齐、静态变量不影响类的大小、vptr指针=8
     */
    cout<<sizeof(A)<<endl; 
    return 0;
}

而去掉虚函数后,sizeof(A)为1

#include<iostream>
using namespace std;
class A
{
    public:
        char b;
};

int main()
{

    cout<<sizeof(A)<<endl;  // 为1
    return 0;
}

所有我有疑问,如果字节对齐不影响类大小,则去掉虚函数的类A的大小应该为7。我推断,字节的对齐应该是会影响类的大小吧。

clion使用请教

如何使用clion运行工程中的示例代码? 我看工程中没有对应Cmake文件

using那些事|改变访问性|

24行这里是想要写 private: 私有成员
然后子类里 using进行使用的吧。

class Base {
...
protected: //私有
int value;
};

this 指针的类型 在不同平台有略微的区别

环境:
Win7 专业版
Visual Studio 2017 社区版

问题:
作者在【this那些事儿】中提到this在普通方法中是TypeName * const 类型, 我在VS中进行了验证, 局部变量this的类型为TypeName *类型。
结论:
初步推测是不同平台,或许是不同IDE导致的这个结果差异.

友元

老哥我用的是c++11,友元也可以在类中定义。

有一处拼写错误

const那些事的第六点,函数中使用const,下面的第一句话将const写做了cost

virtual那些事

构造函数只可以用inline关键词吗?那explicit呢?

关于在Windows上使用git clone下载遇到的问题。

在Window上,git clone下载代码时,下载完成会遇到下面的错误。
”fatal: cannot create directory at 'basic_content/::': Invalid argument“
分析后发现是windows系统不支持创建"::"类型的目录,导致后续的下载失败。
建议该目录改一个名称。

const指针那一块感觉有点问题

看博客里写的是(包括例子的说明),常指针指向的对象的值不能变,可以通过非 常指针来修改。

这个说法似乎不太对,应该是常指针指向的对象不能变,即不能先指向a,又指向b。但是是可以直接修改指向变量的值的(只要这个变量不是const)。我这段代码实验了一下,正常运行:

        int d = 2;
        int e = 3;
        int * const ptr3 = &d;

        //ptr3 = &e;//非法
        std::cout << *ptr3 << std::endl;
        *ptr3 = 4;
        std::cout << *ptr3 << std::endl;

不知道是不是这么个情况

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.