我正在尝试研究一些表演的东西......这个问题可能听起来很愚蠢,但我会尝试一下.假设每个函数有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) 假设我们有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) 我已经设置了一个编译器/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) 我需要将库从一个项目链接到另一个项目,它看起来有两种方式,你能分辨出什么是差异,在一个设置中有"true"和在另一个(相同)设置中有"false"的后果是什么?

另一个:

有什么区别,我是否需要将设置设置为"是"或仅设置一个,如果是这样的话?
是否有选项可以git status显示未跟踪的文件?
我尝试了,git status -u no但隐藏了一切,并告诉:
"无需提交,工作目录清洁"
即使你有文件既提交提交而不是提交提交.
我希望它只显示为提交和修改的文件暂存的文件,但跳过未跟踪的文件.
我试图通过派生类移动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) 我已经阅读了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) 我正在为我的应用程序设计一个类,它实现了许多标准的共享指针和标准容器的使用,例如std :: map和std :: 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)
在函数中更多一行.
它真的需要这样打字,为什么?
我是GitHub的新手,困扰我的一件事是:

为什么我在我的帐户上看到这个"马戏团帐篷"而在其他存储库中没有看到?
在以下代码中:
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++ ×7
github ×2
c++11 ×1
const ×1
emoji ×1
git ×1
git-status ×1
inheritance ×1
linker ×1
option ×1
return-value ×1
vim ×1
warnings ×1