我来自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++的奇怪方法?
我有以下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中元素的顺序无关紧要.我也不在乎是否有重复.
如果数组长度相同,嵌套循环就可以了,但它们不是,我真的不知道如何解决这个问题.
您有以下方法:
async Task DoWorkAsync();
Run Code Online (Sandbox Code Playgroud)
以下两个调用之间的功能是否存在差异:
1. DoWorkAsync();
2. await DoWorkAsync().ConfigureAwait(false);
Run Code Online (Sandbox Code Playgroud)
我唯一看到的是Visual Studio在使用第一个时发出警告,通知您方法执行将继续,而不会等待结果.
我一直在阅读关于链接器如何工作以及围绕此过程的所有内容,以便在此(链接)问题中解释我的问题(它很简短,对于引用很抱歉,但它是相关的).
问题: 如果在标题中我有一个变量声明(使用extern),并且我想在多个源文件中使用此变量(#include其中每个文件中的头文件),我必须为此提供一个定义在某处变量.问题是,如果我在某些源文件的main函数中提供了一个定义,例如,其他文件仍然没有"看到"这个定义(导致链接错误).如果我在一个全局范围中定义这个extern变量,它可以正常工作,并且每个人都可以看到它.
为什么?其他文件如何访问另一个文件的全局范围?并非全球范围变量危险吗?将变量定义放在其他范围可以解决这种链接错误?是否有人在标题中使用此类外部变量声明以及用于何种目的?
编辑:确切的示例情况在我在开头发布的链接中
我在多个 MAC OS X 系统上工作,注销后不保存更改。如您所知,每台新 Mac 上都有 VIM,只需在终端中输入 vim 即可。我总是带着我的 vimrc 文件,问题是每次我启动 vim 时我都必须用:so命令加载它。
我想利用 vim 在每个 unix 上都可用的事实,但我也想利用与终端的巧妙集成来进行快速测试,我只是切换回终端,但为此我需要关闭 vim。当我重新打开它时,我必须再次加载 vimrc。而且我是新手,我什至还没有插件......
我想保持与终端的集成,只开发一种将我的更改引入 vim 的超级快速方法。把这些条件想象成就好像你坐在新安装的操作系统上一样。
谢谢 !
我有三个文件: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中也没有定义呢?如果我必须在任何地方定义它在头文件中包含它的重点是什么,或者如何更恰当地接近它?
我想制作一个脚本来快速替换 unix 类型机器上的 .vimrc 文件。问题是在我正在使用的机器上,vim 不在 home 中,并且它不会在 home 文件夹中搜索 vimrc。
基本上类似于 Vim 中的 :echo $VIMRUNTIME 的终端命令。
c++ ×3
declaration ×2
linker ×2
vim ×2
async-await ×1
bounds ×1
c# ×1
combinations ×1
extern ×1
gcc ×1
header ×1
java ×1
mingw ×1
overwrite ×1
vector ×1