小编cod*_*ddy的帖子

C++什么更快?静态成员函数还是普通成员?

我正在尝试研究一些表演的东西......这个问题可能听起来很愚蠢,但我会尝试一下.假设每个函数有100行相同的代码.或者这种差异是不是真的会得到满足?在main功能执行中哪一个会更快:

struct A
{
    static void f()
         {
               cout << "static one";
         }
};
Run Code Online (Sandbox Code Playgroud)

或者这个:

void f()
{
   cout << "non static";
}

int main()
{
      A::f();
      f();
}
Run Code Online (Sandbox Code Playgroud)

c++

4
推荐指数
1
解决办法
1105
查看次数

具有混合继承修饰符的钻石继承(受保护/私有/公共)

假设我们有class A,B,C,DA在哪里,B,C在两者之间,D在钻石模型中得出.

注意:

class Bclass A私人模式下继承virtualy ,

class Cclass A保护模式下继承virtualy .

class A
{
public:
    int member;  // note this member
};
class B :
    virtual private A // note private 
{

};
class C :
    virtual protected A // note protected
{

};
class D :
    public B, // doesn't metter public or whatever here
    public C
{

};

int main()
{
    D test;
    test.member = 0; // WHAT …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance diamond-problem

4
推荐指数
1
解决办法
540
查看次数

警告C4180:应用于函数类型的限定符没有意义; 忽视

我已经设置了一个编译器/Za选项来禁用lanquage扩展,以便编译器严格使用标准的ISO C++.这是我收到以下警告的示例接口类

警告C4180:应用于函数类型的限定符没有意义; 忽视

它是关于const限定符的返回类型的函数,如果我删除const,警告disapears但我不想这样做,neather我想启用lanqage扩展回来.

我的问题是:这个警告是否合理?如果不是那么我将使用pragma禁用警告但在此之前我想确定此警告是"误报"

因为以下类是正确的ANSI ISO C++ Isn'it?所以警告应该被禁用?

    class IBet
    {
    public:
        IBet() { };
        virtual ~IBet() = 0 { };
        virtual const float parentChips() const = 0; // Warning C4180
        virtual const short parentChilds() const = 0; // Warning C4180
            // ...
    };
Run Code Online (Sandbox Code Playgroud)

c++ warnings const return-value visual-studio

4
推荐指数
1
解决办法
2619
查看次数

在Visual Studio中链接库,为什么有两种不同的方式?

我需要将库从一个项目链接到另一个项目,它看起来有两种方式,你能分辨出什么是差异,在一个设置中有"true"和在另一个(相同)设置中有"false"的后果是什么?

在此输入图像描述

另一个: 在此输入图像描述

有什么区别,我是否需要将设置设置为"是"或仅设置一个,如果是这样的话?

linker option visual-studio-2013

4
推荐指数
1
解决办法
1913
查看次数

git status - 不显示未跟踪的文件

是否有选项可以git status显示未跟踪的文件?

我尝试了,git status -u no但隐藏了一切,并告诉:

"无需提交,工作目录清洁"

即使你有文件既提交提交而不是提交提交.

我希望它只显示为提交和修改的文件暂存的文件,但跳过未跟踪的文件.

git github git-status

4
推荐指数
1
解决办法
2103
查看次数

为什么显式调用base move构造函数实际调用基类复制构造函数?

我试图通过派生类移动ctor显式调用基类移动ctor,但是,惊喜!,实际上调用基类复制ctor而不是基类移动ctor.

我在std::move()对象上使用函数以确保调用派生的移动ctor!

代码:

class Base
{
public:
    Base(const Base& rhs){ cout << "base copy ctor" << endl; }
    Base(Base&& rhs){ cout << "base move ctor" << endl; }
};

class Derived : public Base
{
public:

    Derived(Derived&& rhs) : Base(rhs) { cout << "derived move ctor"; }
    Derived(const Derived& rhs) : Base(rhs) { cout << "derived copy ctor" << endl; }
};

int main()
{
    Derived a;
    Derived y = std::move(a); // invoke move ctor
    cin.ignore(); …
Run Code Online (Sandbox Code Playgroud)

c++ move-constructor

3
推荐指数
1
解决办法
2652
查看次数

如何为vim应用语法文件?

我已经阅读了vim手册页和一堆教程,并设法在vim中设置了我的C ++环境,但是应用语法文件可能是科幻小说。

我下载了一个语法文件“ cpp.vim”,现在该如何应用该文件,这样我的代码才开始发光?

我试图将文件放入以下目录:

〜/ .vim /之后/语法/

〜/ .vim /语法

/ usr / share / vim / vim73 / syntax(但使用不同的名称,因此不能替换旧文件)

这些都不起作用,无论如何,如果我以一个疯狂的名字将文件放入$ VIMRUNTIME /语法中,那么如何将其应用到vim中?

这是我的.vimrc设置:

"
" vim settings
"

set t_Co=256
set nocompatible
set laststatus=2

"set ruler
"set ballooneval
"set balloondelay=400
"set balloonexpr=""


filetype off


"
" vundle settings and plugins
"


set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()

"Vundle Plugin manager
Plugin 'gmarik/Vundle.vim' "vundle plugin manager

"Core plugins
Plugin 'ervandew/supertab' "completition with tab
Plugin 'scrooloose/syntastic' "error checking
Plugin 'vim-scripts/OmniCppComplete' "auto complete …
Run Code Online (Sandbox Code Playgroud)

c++ vim

3
推荐指数
1
解决办法
1万
查看次数

将临时std :: shared_ptr插入std :: map,不好吗?

我正在为我的应用程序设计一个类,它实现了许多标准的共享指针和标准容器的使用,例如std :: mapstd :: vector

这是问题的非常具体的问题,所以我只是为了澄清目的从我的标题中复制了一段代码.这里是标题中声明的快照:

struct Drag;
std::map<short, std::shared_ptr<Drag>> m_drag;
typedef sigc::signal<void, Drag&> signal_bet;
inline signal_bet signal_right_top();
Run Code Online (Sandbox Code Playgroud)

这是使用上述声明的函数之一和临时的shared_ptr,它不仅用于此函数,还用于某个较晚的时间.这意味着在函数返回后,共享指针仍应处于活动状态,因为它将在某个时刻分配给另一个shared_ptr.

void Table::Field::on_signal_left_top(Drag& drag)
{
    m_drag.insert(std::make_pair(drag.id, std::make_shared<Drag>(this))); // THIS!
    auto iter = m_drag.find(drag.id);
    *iter->second = drag;
    iter->second->cx = 0 - iter->second->tx;
    iter->second->cy = 0 - iter->second->ty;

    invalidate_window();
}
Run Code Online (Sandbox Code Playgroud)

上面的函数首先插入一个新的shared_ptr,然后将值从一个对象分配到另一个对象,

我的答案就是要告诉我们将临时的shared_ptr插入地图是否安全,并确保它不会是悬空或什么坏事.

根据网站,上述功能不被认为是安全的,因为写它会更好:

void Table::Field::on_signal_left_top(Drag& drag)
{
    std::shared_ptr pointer = std::make_shared<Drag>(this);
    m_drag.insert(std::make_pair(drag.id, pointer));
    auto iter = m_drag.find(drag.id);
    *iter->second = drag;
    // etc...
 }
Run Code Online (Sandbox Code Playgroud)

在函数中更多一行.

它真的需要这样打字,为什么?

c++ c++11

3
推荐指数
1
解决办法
8671
查看次数

GitHub上的"马戏团帐篷"图标意味着什么?

我是GitHub的新手,困扰我的一件事是:

在此输入图像描述

为什么我在我的帐户上看到这个"马戏团帐篷"而在其他存储库中没有看到?

github emoji

3
推荐指数
1
解决办法
1236
查看次数

通过指向类成员的指针调用函数

在以下代码中:

class foo
{
public:
    void foo_function() {};
};

class bar
{
public:
    foo foo_member;

    void bar_function(foo bar::*p_foo)
    {
        // what is the corrct sintax for following:
        this->*p_foo->foo_function(); // expression must have a pointer type??
    }
};


int main()
{
    foo foo_obj;
    bar bar_obj;
    typedef foo bar::*p_foo;
    p_foo blah = &bar::foo_member;
    bar_obj.bar_function(blah);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

使bar :: bar_function工作的正确语法是什么?

c++ member-pointers

3
推荐指数
1
解决办法
64
查看次数