小编rps*_*sml的帖子

适用于malloc的正确论据

我总是使用这个malloc函数,例如,

int size = 10000;
int *a;
a = malloc(size * sizeof(int));
Run Code Online (Sandbox Code Playgroud)

我最近遇到了丢弃该sizeof(int)部分的一段代码,即

int size = 10000;
int *a;
a = malloc(size);
Run Code Online (Sandbox Code Playgroud)

第二个代码似乎工作正常.

我的问题是,哪种形式是正确的?如果是第二种形式,我是否用第一种形式分配不必要的空间.

c

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

使用(out)常量表达式定义数组

我正在慢慢将自己升级到c ++ 11.我看着constexpr并偶然发现这篇维基百科文章引导我"完全不同的东西".它给出的基本例子是:

int get_five() {return 5;}
int some_value[get_five() + 7]; // Create an array of 12 integers. Ill-formed C++
Run Code Online (Sandbox Code Playgroud)

它声明"这在C++ 03中不合法,因为get_five()+ 7不是常量表达式." 并说,加入constexprget_five()声明解决了这个问题.

我的问题是"有什么问题?".我编译的代码既没有错误也没有警告.我玩它使它非常不稳定:

#include <iostream>

int size(int x) { return x; }

int main()
{
  int v[size(5) + 5];
  std::cout << sizeof(v) + 2 << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

使用以下内容编译时没有任何投诉:

g++ -Wall -std=c++03
Run Code Online (Sandbox Code Playgroud)

并且在执行时我得到(正确的)答案42.

我承认我通常使用stl容器,而不是数组.但我认为(显然维基百科也是这样)上述代码的编译会失败.它为什么成功?

c++ c++11

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

标签 统计

c ×1

c++ ×1

c++11 ×1