当前位置: 首页 > 知识库问答 >
问题:

是否有一种方法可以在C++编译时限制数据大小并产生编译错误?

何星鹏
2023-03-14

我的编译链是:

g++ -Wall -Wextra -Waddress -std=c++11 -lm -fstack-protector -lm -o exename srcname

多谢帮忙。

编辑1

#include <iostream>
#include <array>
using namespace std;

const int NB = 3;

int calcul (int a, int b);
array<array<int, NB>,NB> produitTableau(array<array<int, NB>,NB> t, int a);

int main()
{
    /* déclaration et initialisation  */
    array<array<int, NB>,NB> tab ;
    int x;
    cin >> x;
    for (int i=0;i<NB;i++) {for(int j=0; j<NB; j++) {cin >> tab[i][j];}}

    /* traitement et résultat  */
    tab = produitTableau(tab, x);

    /* résultat */
    for (int i=0; i < NB; i++) {
      for (int j=0; j < NB; j++) {
        cout << tab[i][j] << " ";
      }
    }

  return 0;
}

int calcul(int a, int b)
{
   return a*b;
}

**(here)**
array<array<int, NB>,NB> produitTableau(array<array<int, NB>,NB> t, int a)
{
    for (int i=0; i < NB; i++) {
      for (int j=0; j < NB; j++) {
        t[i][j] = calcul(t[i][j] , a);
      }
    }

   return t;

}

可能是exe文件...我不知道。

共有1个答案

嵇出野
2023-03-14

如果防止包含其他内容,可以修改std::array ,以便将N限制在某个最大大小;然后让学生包含那个数组。

修改可能简单到添加:

static_assert(N == NB, "For this homework assignment you can only use arrays of NB elements");

在array类中以及文件的前面,

constexpr const size_t NB = 123;
 类似资料:
  • 问题内容: 我正在使用javascript和htmlcanvas调整jpeg图像的大小。调整大小后,我在锚标记中用作href属性,以提供一个链接,用户可以在其中下载调整大小的图像。 在一定的图像尺寸下效果很好。 似乎不同的浏览器对数据URL的大小有不同的限制,如下所述 在chrome中,当我超出数据URL大小限制时,单击下载链接不会发生任何事情。没有错误或任何东西(据我所知)。 是否可以通过编程方

  • 我正在尝试为自定义模板类创建一个加法运算符,其中第一个参数可以是我的类的实例,也可以是基本的数字类型。My operator的定义类似于下面的示例代码: 我的预期是,由于SFINAE,试图用

  • 我有以下代码: 我希望它输出“0,1,2,3”并停止,但它输出的是一系列无穷无尽的“0、1、2、3、4、5……” 看起来比较< code>di 如果我只是注释掉< code >,delta=mc[di],我会正常得到“0,1,2,3”。无辜作业有什么问题? 我正在使用Ideone.com g14带-O2选项。

  • 问题内容: 在关于反射的本教程中,它指出: […]因为泛型是通过类型擦除实现的,因此在编译过程中会删除有关泛型类型的所有信息 我的知识是使用泛型,以便在编译时编译器可以检查类型安全性。即失败快速方法。但是该链接提到类型擦除会在编译期间删除通用信息。 问题答案: 您引用的语句是正确的:编译器在编译过程中在内部使用通用类型信息,在处理源时会生成与类型相关的错误。然后,一旦完成验证,编译器将生成类型擦除

  • 问题内容: 是否可以编译无需重新编译即可在所有Linux发行版中执行的C / C ++源代码? 如果答案是肯定的,我可以使用任何外部(非标准C / C ++)库吗? 我要分发我的二进制应用程序,而不是分发源代码。 问题答案: 不,您不能编译在所有Linux发行版中执行的可执行文件。但是,您可以编译可在人们倾向于关注的大多数发行版上运行的可执行文件。 编译32位。为您愿意支持的最低CPU级别进行编译

  • 问题内容: 我正在尝试从Maven内部执行繁琐的任务,而无需安装Node.js或任何东西。这是因为我不想将我的工件由Jenkins打包,也无法在该机器上安装Node.js。 我知道使用npm很容易,并且有一些命令可以使它正常工作,但是我也认为与maven集成应该很容易,问题是我不知道从哪里开始,因为我是npm的新手。 问题答案: 是的,使用frontend-maven-plugin,您可以通过Ma