小编ana*_*ciu的帖子

编译时对 std::array 的引用大小不可用

我很想知道为什么static_assert下面代码中的第二个不起作用。似乎即使数组c是对 的引用a,数组的大小也嵌入在类型中,因此它应该在编译时可用。

#include <array>

int main()
{
    std::array<int,2> a = {1,2};
    std::array<int,2> b = {2,3};
    std::array<int,2>& c = a;

    static_assert(a.size() == b.size(), "a.size==b.size"); // ok size of array is compile time constant
    static_assert(c.size() == a.size(), "c.size==a.size"); // compiler error "static_assert expression is not an integral constant expression"
}
Run Code Online (Sandbox Code Playgroud)

c++ arrays static-assert stdarray

7
推荐指数
1
解决办法
517
查看次数

printf("%f",x) ok, printf("%F",x) 错误格式参数太多

当我在 CodeBlocks 中使用说明符 F 时,为什么编译器给我错误“格式参数太多”?

#include <stdio.h>

int main()
{
    float x = 3.14159;
    printf("%f\n", x);
    printf("%F\n", x);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

错误:

#include <stdio.h>

int main()
{
    float x = 3.14159;
    printf("%f\n", x);
    printf("%F\n", x);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c printf codeblocks format-specifiers

6
推荐指数
1
解决办法
253
查看次数

无法打开 cp_init 重新映射的类缓存:无法初始化类

我正在使用计算器(顺便说一句,我是初学者)。我几乎完成了它,直到我需要格式化我的电脑并在第一次打开 Android Studio 后,它才打开,但现在它没有并且显示此异常:

失败:构建失败并出现异常。

什么地方出了错:

无法打开 a4fwtlbt6cgvdv2n0389t2u6w 的 cp_init 重新映射类缓存(C:\Users\tambe.gradle\caches\6.1.1\scripts-remapped\sync_studio_tooling_9cltx0zcw96du3cin68bzeyz1\a4fwtlbt6cgvdv2n0389t2u6w\cp_init36 07aee355f62839c5e6f549478ccc87)。

无法打开初始化脚本 'C:\Users\tambe\AppData\Local\Temp\sync.studio.tooling.gradle' 的 cp_init 通用类缓存 (C:\Users\tambe.gradle\caches\6.1.1\scripts\ a4fwtlbt6cgvdv2n0389t2u6w\cp_init\cp_init3607aee355f62839c5e6f549478ccc87)。无法初始化类 org.codehaus.groovy.vmplugin.v7.Java7

尝试:使用 --info 或 --debug 选项运行以获得更多日志输出。使用 --scan 运行以获得完整的见解。

...

异常很大,如果需要的话问我,我会把它粘贴到这里。

...

在https://help.gradle.org获取更多帮助

6 秒内构建失败

我很沮丧,因为我花了很多时间试图弄清楚如何在没有帮助的情况下自己完成这个项目。拜托,我真的很需要!

java android gradle android-studio

6
推荐指数
1
解决办法
5279
查看次数

模仿 C++ 中的静态构造函数

这是一个与 C++ 中对象初始化相关的问题。

我有一组类(不是实例),它们继承自一个公共基类,我需要它们在程序启动时在容器(特别是地图)中注册有关它们自己的信息。

问题是我需要它是动态的。容器定义在一个独立的项目中,不同于类。我宁愿避免制作库的多个硬编码版本,每个使用它的程序中的每一组类都有一个。

我想过在每个子类中都有一个特殊类的静态实例,这将在其构造函数中进行注册。但是,我发现没有办法保证在构造这些对象之前构造容器。

我还应该注意,在创建这些子类的任何实例之前,容器中关于子类的信息应该可用。

有没有办法做到这一点,或者在一般情况下模仿 C++ 中的静态构造函数?

c++ static-constructor static-initialization

5
推荐指数
1
解决办法
3003
查看次数

将长整数(十进制)转换为基数为 36 的字符串(C 中的 strtol 反转函数)

我可以使用该strtol函数将基于 base36 的值(另存为字符串)转换为long int

long int val = strtol("ABCZX123", 0, 36);
Run Code Online (Sandbox Code Playgroud)

是否有标准函数允许反转它?也就是把一个long intval变量转换成base36字符串,再获取"ABCZX123"

c base64 strtol

5
推荐指数
1
解决办法
705
查看次数

为什么不能为常量分配一个字符串字面量引用指针

我可以使指针指向字符串文字,它将字符串文字转换为常量指针,但对指针的引用不能分配字符串文字,例如:

 const char *&text = "Hello, World\n"; 
Run Code Online (Sandbox Code Playgroud)

有一个错误,编译器说我不能将数组转换为指针引用,我很好奇,为什么它不正确?

c++ pointers reference constants const-pointer

5
推荐指数
2
解决办法
379
查看次数

malloc 是动态内存分配吗?

我被教官说叫p = (int*)malloc(5 * sizeof(int))不是动态内存分配,并且p=(int*)malloc(n * sizeof(int))是动态内存分配。

讲师正在谈论基本数据结构并教授数组。他曾告诉我们使用int arr[100]语法创建数组的传统方法,但随后他向我们介绍了 malloc。

据他说,由于内存大小不会改变,我猜它不是动态的。

从我可以从互联网上收集的信息来看,malloc在运行时分配内存,以及在运行时分配内存时的动态内存分配。所以我认为这两个malloc语句都是动态内存分配。我的推理有问题吗?

c malloc dynamic-memory-allocation language-lawyer

5
推荐指数
2
解决办法
302
查看次数

你可以将“cin”与字符串一起使用吗?

我被告知你必须使用gets(str)来输入字符串而不是cin。不过我可以cin在下面的程序中很好地使用。有人可以告诉我是否可以使用cin吗?对不起,我的英语不好。该程序允许您插入 5 个姓名,然后将这些姓名打印到屏幕上。

这是代码:

#include <iostream>
#include <string.h>
using namespace std;

int main()
{
    char **p = new char *[5];
    for (int i = 0; i < 5; i++)
    {
        *(p + i) = new char[255];
    } //make a 2 dimensional array of strings

    for (int i = 0; i < n; i++)
    {
        char n[255] = "";
        cout << "insert names: ";
        cin >> n; //how i can use cin here …
Run Code Online (Sandbox Code Playgroud)

c++ dev-c++

5
推荐指数
2
解决办法
3万
查看次数

C中下溢和nan有什么区别?

目前我正在学习浮点异常。我正在写一个带有函数的循环。在该函数中,计算出的值等于0.5。随着循环的进行,输入值除以10

循环:

 for(i = 0; i < e; i++)
 {
     xf /= 10.0;   // force increasingly smaller values for x
     float_testk (xf, i);
 }
Run Code Online (Sandbox Code Playgroud)

功能:

void float_testk(float x, int i)
{
    float result;
   
    feclearexcept(FE_ALL_EXCEPT); // clear all pending exceptions
         
    result = (1 - cosf(x)) / (x * x);
        
    if(fetestexcept(FE_UNDERFLOW) != 0)
        fprintf(stderr,"Underflow occurred in double_testk!\n");
    if(fetestexcept(FE_OVERFLOW) != 0)
        fprintf(stderr,"Overflow occurred in double_testk!\n");
    if(fetestexcept(FE_INVALID) != 0)
        fprintf(stderr,"Invalid exception occurred in double_testk!\n");
   
    printf("Iteration %3d, float result for x=%.8f …
Run Code Online (Sandbox Code Playgroud)

c floating-point computer-science loops sigfpe

5
推荐指数
2
解决办法
203
查看次数

我们可以在 C 中将 (void *)0 称为 void 指针吗?

总结 C 标准,特别是ISO/IEC 9899:201x \xc2\xa76.3.2.3 - 3

\n

如果将指针与常量文字进行比较0,则检查该指针是否为空指针。这0被称为空指针常量。C 标准定义0转换为类型void *既是空指针又是空指针常量。

\n

现在,如果我们看一下(void *)0它是一个指向 的地址(在这种情况下是非法的)void

\n

通常我们可以将这样的地址转换为任何适当的指针数据类型并取消引用它,但在这里即使在将其转换为其他指针类型之后,取消引用它也是非法的。

\n

所以我的疑问是:

\n

我们可以(void *)0按照其定义的方式调用 void 指针吗?

\n

另请参阅下面的代码:

\n
void *pointer = NULL;\n
Run Code Online (Sandbox Code Playgroud)\n

现在我该怎么称呼它呢?void 指针、空指针还是 null void 指针?

\n

c null pointers void-pointers null-pointer

5
推荐指数
1
解决办法
3332
查看次数