小编lek*_*oif的帖子

C++:向量边界

我来自Java并且正在学习C++.我正在使用Stroustrup的Progamming原则和使用C++的实践.我现在正在使用矢量.在页117,他说,访问向量的不存在元素将导致运行时错误(在Java中相同,索引超出范围).我正在使用MinGW编译器,当我编译并运行此代码时:

#include <iostream>
#include <cstdio>
#include <vector>

int main() 
{ 
    std::vector<int> v(6);
    v[8] = 10;
    std::cout << v[8];
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它给了我作为输出10.更有趣的是,如果我不修改不存在的向量元素(我只打印它期望运行时错误或至少是默认值)它会打印一些大整数.那么...... Stroustrup是错误的,还是GCC有一些编译C++的奇怪方法?

c++ gcc mingw vector bounds

11
推荐指数
3
解决办法
9763
查看次数

如何获得2D数组可能的组合

我有以下2D数组:

String[M][]

String[0]
   "1","2","3"

String[1]
   "A", "B"
   .
   .
   .
String[M-1]
   "!"
Run Code Online (Sandbox Code Playgroud)

所有可能的组合应存储在结果数组中 String[] combinations.例如:

combinations[0] == {"1A....!")
combinations[1] == {"2A....!") 
combinations[2] == {"3A....!") 
combinations[3] == {"1B....!")
Run Code Online (Sandbox Code Playgroud)

请注意,数组的长度可变.输出String中元素的顺序无关紧要.我也不在乎是否有重复.

如果数组长度相同,嵌套循环就可以了,但它们不是,我真的不知道如何解决这个问题.

java combinations multidimensional-array

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

ConfigureAwait(false)和省略等待之间的区别?

您有以下方法:

async Task DoWorkAsync();
Run Code Online (Sandbox Code Playgroud)

以下两个调用之间的功能是否存在差异:

1. DoWorkAsync();
2. await DoWorkAsync().ConfigureAwait(false);
Run Code Online (Sandbox Code Playgroud)

我唯一看到的是Visual Studio在使用第一个时发出警告,通知您方法执行将继续,而不会等待结果.

c# async-await

8
推荐指数
2
解决办法
1486
查看次数

翻译单位如何访问另一个翻译单元的全球范围?

我一直在阅读关于链接器如何工作以及围绕此过程的所有内容,以便在此(链接)问题中解释我的问题(它很简短,对于引用很抱歉,但它是相关的).

问题: 如果在标题中我有一个变量声明(使用extern),并且我想在多个源文件中使用此变量(#include其中每个文件中的头文件),我必须为此提供一个定义在某处变量.问题是,如果我在某些源文件的main函数中提供了一个定义,例如,其他文件仍然没有"看到"这个定义(导致链接错误).如果我在一个全局范围中定义这个extern变量,它可以正常工作,并且每个人都可以看到它.

为什么?其他文件如何访问另一个文件的全局范围?并非全球范围变量危险吗?将变量定义放在其他范围可以解决这种链接错误?是否有人在标题中使用此类外部变量声明以及用于何种目的?

编辑:确切的示例情况在我在开头发布的链接中

c++ linker header declaration extern

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

VIM:覆盖系统 vimrc

我在多个 MAC OS X 系统上工作,注销后不保存更改。如您所知,每台新 Mac 上都有 VIM,只需在终端中输入 vim 即可。我总是带着我的 vimrc 文件,问题是每次我启动 vim 时我都必须用:so命令加载它。

我想利用 vim 在每个 unix 上都可用的事实,但我也想利用与终端的巧妙集成来进行快速测试,我只是切换回终端,但为此我需要关闭 vim。当我重新打开它时,我必须再次加载 vimrc。而且我是新手,我什至还没有插件......

我想保持与终端的集成,只开发一种将我的更改引入 vim 的超级快速方法。把这些条件想象成就好像你坐在新安装的操作系统上一样。

谢谢 !

vim overwrite

2
推荐指数
1
解决办法
1866
查看次数

C++:使用GCC编译器链接文件

我有三个文件:myh.h; my.cpp; use.cpp.以下是文件的内容:

myh.h

extern int foo;
void print_foo();
void print(int);
Run Code Online (Sandbox Code Playgroud)

my.cpp

#include "myh.h"
#include <iostream>
void print_foo()
{
    std::cout<<foo<<std::endl;
}
void print(int i)
{
    std::cout<<i<<std::endl;
}
Run Code Online (Sandbox Code Playgroud)

use.cpp

#include "myh.h"
int main()
{
    foo=7;
    print_foo();
    print(99);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

GCC发出以下错误:

my.o:my.cpp:(.text+0x7): undefined reference to `foo'
use.o:use.cpp:(.text+0x10): undefined reference to `foo'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

我使用-c命令编译文件,它不会给出错误.我使用以下命令进行链接:

g++ -o final my.o use.o
Run Code Online (Sandbox Code Playgroud)

这里有什么问题,我读了类似问题的其他主题,这里的情况很奇怪.....

好奇的是,这是Stroustrup的"使用C++编程原则"一书中的练习练习

编辑:我做了像dasblinkenlight说的那样,并且在use.cpp中我在foo前添加了一个int(所以现在定义了foo),但我仍然得到这个错误:

my.o:my.cpp:(.text+0x7): undefined reference to `foo'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

哪个告诉我它在my.cpp中也没有定义呢?如果我必须在任何地方定义它在头文件中包含它的重点是什么,或者如何更恰当地接近它?

c++ linker declaration undefined-reference

2
推荐指数
1
解决办法
363
查看次数

如何在 vim 之外获取 Vim 运行时路径

我想制作一个脚本来快速替换 unix 类型机器上的 .vimrc 文件。问题是在我正在使用的机器上,vim 不在 home 中,并且它不会在 home 文件夹中搜索 vimrc。

基本上类似于 Vim 中的 :echo $VIMRUNTIME 的终端命令。

vim

0
推荐指数
1
解决办法
1505
查看次数