我的复制操作符的源代码编写如下.
foo = rhs.foo;
foobar = rhs.foobar;
bar = rhs.bar;
toto = rhs.toto;
Run Code Online (Sandbox Code Playgroud)
我想按照以下方式排列(更具人性化,不是吗?).
foo = rhs.foo;
foobar = rhs.foobar;
bar = rhs.bar;
toto = rhs.toto;
Run Code Online (Sandbox Code Playgroud)
是否有一个VIM魔术插入到列N,或类似的东西,这将允许我使用每行几次击键排队?
我在每次提交时在buildbot中编译2个C++项目.两者都是大约1000个文件,一个是100 kloc,另一个是170 kloc.编译时间与gcc(4.4)到Visual C++(2008)有很大不同.
一个项目的Visual C++编译需要20分钟.他们无法利用多核,因为项目依赖于另一个.最后,在Debug和Release中对32和64位的两个项目进行完整的编译需要超过2 1/2小时.
一个项目的gcc汇编需要4分钟.它可以在4个核心上并行化,大约需要1分10秒.2个项目的4个版本(Debug/Release,32/64位)的所有8个版本都在不到10分钟的时间内编译完成.
Visual C++编译时发生了什么?它们基本上慢了5倍.
编译C++ kloc的平均时间是多少?我的是带有vc ++的7 s/kloc和带有gcc的1.4 s/kloc.
可以做任何事情来加快Visual C++上的编译时间吗?
最近的一次讨论结束时嘲笑程序员的坏习惯,当他们开始用另一种语言编程时,他们过于暴露于某种语言.最好的例子是Pascal程序员开始#define begin {和#define end }开始写C.
目标是在他们开始使用C++时尝试捕捉C程序员的坏习惯.
告诉你不要遇到的大事.请回答一个建议,试图实现一种最好的.
对于那些对良好习惯感兴趣的人,请看一下这个问题的接受答案.
以下问题应用程序如何在运行时解析为不同版本的共享库?,我想知道如何在链接命令行上指定要使用哪个版本的库?
让我说我有
libmy.so.1.0
libmy.so.1 -> libmy.so.1.0
libmy.so.2.0
libmy.so.2 -> libmy.so.2.0
libmy.so -> libmy.so.2
Run Code Online (Sandbox Code Playgroud)
指定要与可执行文件链接的库的常用方法不显示要使用的版本.此外,很可能想要与最新版本链接.因此,在大多数情况下,通常的线路工作正常
gcc app.o -lmy -o app
Run Code Online (Sandbox Code Playgroud)
app要使用库的版本1的链接命令行是什么?
我有一行文字,我已经猛拉了yy.现在我想用这个文本替换其他几个地方的行.麻烦的是,当我选择V要替换的行并粘贴时p,所选的文本会被自动拉出!这就是我不想要的.
更改寄存器不起作用,因为粘贴和抽取都是使用新选择的寄存器完成的.
粘贴选定文本时保留寄存器内容的命令是什么?
我希望能够将我的bin和我的代码文件拆分成单独的目录,因为它在当前状态下变得难以管理.
我理想的是希望拥有
project_dir
|-Makefile
|-run_tests.sh
|
|__source
| |-program1.cpp
| |-program2.cpp
|
|__bin
|-program1
|-program2
Run Code Online (Sandbox Code Playgroud)
但是我无法使用我当前的系统,而不必手动写出每个程序的规则(请记住,每个程序都是一个单独的程序,而不是一系列链接在一起的对象)
#Current make system
BIN=./bin/
SOURCE=./source/
LIST=program1 program2...
all: $(LIST)
%: $(SOURCE)%.cpp
$(CC) $(INC) $< $(CFLAGS) -o $(BIN)$@ $(LIBS)
Run Code Online (Sandbox Code Playgroud)
这工作除了它我无法在当前路径中看到目标,因此它认为它总是重建二进制文件,即使源文件没有更改.
我目前唯一想到的是编写一个程序来制作一个makefile,但我不想这样做.
为什么这样做:
char *fd = "myfile.txt";
struct stat buf;
stat(fd, &buf);
int size = buf.st_size;
printf("%d",size);
Run Code Online (Sandbox Code Playgroud)
但这不起作用:
char *fd = "myfile.txt";
struct stat *buf;
stat(fd, buf);
int size = buf->st_size;
printf("%d",size);
Run Code Online (Sandbox Code Playgroud) 当编译我们的项目,我们创建几个档案(静态库),说liby.a和libz.a每个包含定义函数的对象文件y_function()和z_function().然后,这些存档被连接在一个共享对象中,比如说libyz.so,这是我们的主要可分发目标之一.
g++ -fPIC -c -o y.o y.cpp
ar cr liby.a y.o
g++ -fPIC -c -o z.o z.cpp
ar cr libz.a z.o
g++ -shared -L. -ly -lz -o libyz.so
Run Code Online (Sandbox Code Playgroud)
当使用该共享对象到示例程序,比方说x.c,链接失败,因为到功能的未定义的引用y_function()和z_function().
g++ x.o -L. -lyz -o xyz
Run Code Online (Sandbox Code Playgroud)
但是,当我将最终可执行文件直接与归档(静态库)链接时,它可以工作.
g++ x.o -L. -ly -lz -o xyz
Run Code Online (Sandbox Code Playgroud)
我的猜测是,归档中包含的目标文件没有链接到共享库中,因为它们中没有使用它们.如何强制包容?
编辑:
可以使用--whole-archive ld选项强制包含.但如果导致编译错误:
g++ -shared '-Wl,--whole-archive' -L. -ly -lz -o libyz.so
/usr/lib/libc_nonshared.a(elf-init.oS): In function `__libc_csu_init':
(.text+0x1d): undefined …Run Code Online (Sandbox Code Playgroud) 我有我的程序生成一些数据.它输出标准错误的一切.
现在,我想将输出重定向到新启动的文本编辑器,进入启动时显示的主要未命名编辑窗口.我尝试使用vim和gedit但没有成功.
myprogram | gedit
myprogram | gvim
Run Code Online (Sandbox Code Playgroud)
有人知道X11文本编辑器会支持这个吗?
在成员函数的范围内,我想暂时将成员变量设置为某个值.
然后,当此函数返回时,我想将此成员变量重置为给定的已知值.
为了防止异常和多次返回,我已经使用类似简单的RAII来完成它.它是在成员函数的范围内定义的.
void MyClass::MyMemberFunction() {
struct SetBackToFalse {
SetBackToFalse(bool* p): m_p(p) {}
~SetBackToFalse() {*m_p=false;}
private:
bool* m_p;
};
m_theVariableToChange = true;
SetBackToFalse resetFalse( &m_theVariableToChange ); // Will reset the variable to false.
// Function body that may throw.
}
Run Code Online (Sandbox Code Playgroud)
看起来很平常,我想知道是否有任何这样的模板类在C++标准库中这样做?