C和C++中未定义,未指定和实现定义的行为有什么区别?
c c++ undefined-behavior unspecified-behavior implementation-defined-behavior
我偶然发现了一个涉及不同大小数组声明的测验。我想到的第一件事是我需要对new命令使用动态分配,如下所示:
while(T--) {
int N;
cin >> N;
int *array = new int[N];
// Do something with 'array'
delete[] array;
}
Run Code Online (Sandbox Code Playgroud)
但是,我看到其中一种解决方案允许以下情况:
while(T--) {
int N;
cin >> N;
int array[N];
// Do something with 'array'
}
Run Code Online (Sandbox Code Playgroud)
经过一番研究,我读到 g++ 允许这样做,但它让我一直在思考,在哪些情况下有必要使用动态分配?还是编译器将其翻译为动态分配?
包括删除功能。但是请注意,这里的问题与内存泄漏无关。
c++ arrays dynamic-memory-allocation static-memory-allocation
以下代码在gcc 4.8和Clang 3.2下编译:
int main()
{
int size = 10;
int arr[size];
}
Run Code Online (Sandbox Code Playgroud)
C++标准的8.3.4/1表示数组的大小必须是一个整数常量表达式,这size似乎不是.这是两个编译器中的错误,还是我错过了什么?
最新的VC++ CTP用这个有趣的消息拒绝代码:
error C2466: cannot allocate an array of constant size 0
Run Code Online (Sandbox Code Playgroud)
有趣的是,它似乎认为size是零.但至少它拒绝了代码.gcc和Clang应该不一样吗?
c++ arrays compile-time-constant variable-length-array c++11
#include <iostream>
using namespace std;
int main(){
int n=10;
int a[n];
for (int i=0; i<n; i++) {
a[i]=i+1;
cout<<a[i]<<endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在Mac下的Xcode4中运行良好
如书中所说,这应该是错的,为什么?
好糊涂〜
我想知道在c ++中执行以下代码段的一些替代方法。
int i;
cin >> i;
int arr[i];
Run Code Online (Sandbox Code Playgroud)
我最近开始研究竞争性编程并尝试学习更多。
编辑:对于那些不是cpp的评论。它使用我正在使用的类中正在使用的makefile成功编译,gcc -std=c++11 -o a.exe main.cpp并在输入长度为1时返回到控制台
array length: 1
Run Code Online (Sandbox Code Playgroud) 与临时变量的交换没有给出任何输出,但 swap() 给出了所需的输出。我正在尝试将 arr[i] 与 arr[arr[i]+1] 交换。
这段代码给出了所需的输出
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int arr[n],i,temp;
for(i=0;i<n;i++) {
cin>>arr[i];
}
for(i=0;i<n;i++) {
swap(arr[i],arr[arr[i]+1]);
}
for(i=0;i<n;i++) {
cout<<arr[i]<<" ";
}
}
Run Code Online (Sandbox Code Playgroud)
但对于 temp 变量,没有输出。代码如下
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int arr[n],i,temp;
for(i=0;i<n;i++) {
cin>>arr[i];
}
for(i=0;i<n;i++) {
temp=arr[i];
arr[i]=arr[arr[i]+1];
arr[arr[i]+1]=temp;
}
for(i=0;i<n;i++) {
cout<<arr[i]<<" ";
}
}
Run Code Online (Sandbox Code Playgroud)
我不知道出了什么问题。我希望很快能得到答复。谢谢你!
在我的 C++ 代码中,我想写字符数组 s[n] 而不是写 s[10]。其中 n 是 size 是数组,它由用户在运行时给出。但它不接受输入。它只取 n,而不是字符串。
我得到了这样的输出,
输入尺寸:10
输入字符串:
细绳 :
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
int n;
cout<<"Enter size : ";
cin>>n;
char s[n];
cout<<"Enter String : \n";
cin.getline(s,n);
cout<<"String : \n";
int l=strlen(s);
cout.write(s,l);
return 0;
}
Run Code Online (Sandbox Code Playgroud)