小编Roh*_*ari的帖子

为什么“int (*)(float)”指向“int foo()”会触发警告,而“int (*)(double)”则不会触发警告?

我有这段代码:

int foo() { return 0; }
int main()
{
    int (*float_function)(float) = foo;
}
Run Code Online (Sandbox Code Playgroud)

x86-64 GCC 12.2当使用, with编译时-Wall,它会产生警告(链接):

警告:从不兼容的指针类型“int (*)()”初始化“int (*)(float)”[-Win兼容指针类型]

但是,当我从 更改floatdouble链接)时:

int foo(){ return 0;}
int main()
{
    int (*double_function)(double) = foo;
}
Run Code Online (Sandbox Code Playgroud)

现在警告消失了。

但我认为这两者都应该受到警告。

我有什么地方说错了吗?为什么 GCC 不抱怨第二个例子?

c function-pointers language-lawyer

53
推荐指数
1
解决办法
2100
查看次数

在匿名类中返回 *this 时,“自动”返回类型的类型是什么?

在这段代码中:

struct
{
    auto operator[](const char*)
    {
        return *this;
    }

} m_some_class;
Run Code Online (Sandbox Code Playgroud)

这里的类型是什么auto

c++ class auto c++11

35
推荐指数
4
解决办法
2216
查看次数

表达式 std::string {} = "..." 是什么意思?

在此代码中:

#include <iostream>

int main(void)
{
    std::string {} = "hi";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这种类型的声明在 C++ 中有效。参见《Godbolt》

  • 这是什么意思?
  • 它如何有效?

作为信息,我测试了这个程序从c++11c++20标志,因为扩展初始值设定项从以后可用c++11

c++ string

16
推荐指数
1
解决办法
858
查看次数

npm 错误!尝试安装 Express 时出现代码 EAI_AGAIN 错误

我正在通过课程学习 Web 开发,现在是时候使用节点包管理器安装 Express 了。我必须安装express并使用以下命令:

npm install express
Run Code Online (Sandbox Code Playgroud)

我收到一条错误消息:

npm ERR! code EAI_AGAIN

npm ERR! errno EAI_AGAIN

npm ERR! request to https://registry.npmjs.org/express failed, reason: getaddrinfo EAI_AGAIN registry.npmjs.org

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\User\AppData\Roaming\npm-cache\_logs\2020-07-21T08_32_35_6
54Z-debug.log
Run Code Online (Sandbox Code Playgroud)

我现在完全迷失了。请不要评判我,因为我对 Node 还很陌生。非常感谢您的帮助。

javascript node.js npm

15
推荐指数
3
解决办法
6万
查看次数

复制构造函数的用途是什么,而赋值运算符“=”也可以这样做?

为什么 C++ 提供复制构造函数?赋值运算符可以完成相同的任务。与赋值运算符相比,复制构造函数有什么优势吗?

c++ oop copy-constructor

15
推荐指数
2
解决办法
2357
查看次数

编译包含 aarch64 C 库的 rust crate 时遇到问题

我正在尝试在 aarch64 linux docker 容器中编译一个 rust 应用程序以在树莓派 4 上运行。除了包不是纯 rust 并使用 c 库时,我的工作正常。环形就是一个例子,当我尝试构建环形库而不设置时,ENV TARGET_CC=something它失败并出现以下错误:

#18 32.35    Compiling ring v0.16.19
#18 38.13 error: failed to run custom build command for `ring v0.16.19`
#18 38.13 
#18 38.13 Caused by:
#18 38.13   process didn't exit successfully: `/usr/src/content-manager/target/release/build/ring-902dd3bf18c6ec17/build-script-build` (exit code: 101)
#18 38.13   --- stdout
#18 38.13   OPT_LEVEL = Some("3")
#18 38.13   TARGET = Some("aarch64-unknown-linux-musl")
#18 38.13   HOST = Some("aarch64-unknown-linux-gnu")
#18 38.13   CC_aarch64-unknown-linux-musl = None
#18 38.13   CC_aarch64_unknown_linux_musl = None …
Run Code Online (Sandbox Code Playgroud)

c cross-compiling rust docker arm64

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

C++中声明一系列类对象时的内存分配

class Data {
    double a, b, c;
};

int main() {
    Data x, y, z;
    cout << sizeof(x) << endl;
    cout << &x << " " << &y << " " << &z << endl;
}
Run Code Online (Sandbox Code Playgroud)

上述代码的输出是:

24
0x7ffd911f5640 0x7ffd911f5660 0x7ffd911f5680
Run Code Online (Sandbox Code Playgroud)

我的问题是: Data 类对象只需要 24 字节的空间,那么为什么编译器为每个对象分配 32 字节(0x7ffd911f5640和之间的内存空间)?0x7ffd911f5660

c++ oop ooad memory-management class

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

有多大的“int”可以隐式转换为“char”?

使用以下代码:

#include <stdio.h>

int main(void) {
  printf("%c %c ", 82, 2130);

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我得到输出:

R R
Run Code Online (Sandbox Code Playgroud)

怎么2130转换成R

c ascii casting

3
推荐指数
1
解决办法
69
查看次数

如何通过与 C++ 中的其他项相乘来更新数组项

我想要得到的结果是将索引值与其他索引值相乘。例如在下面的代码中:我想通过 arr[0]*arr[1] 更新 arr[0] 值,通过 arr[9]*arr[9-8] 更新 arr[9] 值,对于剩余的索引,它将是 arr[i-1] * arr[i] * arr[i+1]。它在第一个索引上运行良好,但在其他索引上我得到了意想不到的结果。

#include<iostream>
using namespace std;

int main(){
    int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, j, k;
    
    for(j = 0; j < 10; j++){
        if(j == 0){
            arr[j] = arr[j] * arr[j + 1];
        }else if(j == 9){
            arr[j] = arr[j] * arr[j - 1];
        }else{
            arr[j] = arr[j - 1] * arr[j] * arr[j + 1];
        }
    }
    
    for(k = 0; …
Run Code Online (Sandbox Code Playgroud)

c++ arrays

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

我应该预防性地移动可调用对象(例如 lambda 吗?)

我有一个计时器的精简示例,我希望可以使用任何类型的可调用来实例化它。为了提高效率,是否建议预防性地将可调用对象移至数据成员中?

#include <concepts>
#include <cstdio>
#include <string>
#include <utility>

template <std::invocable Cb>
class timer {
public:
    timer(Cb cb)
        : cb_ { std::move(cb) }
    {
    }

    auto call()
    {
        cb_();
    }

private:
    Cb cb_;
};

int main()
{
    std::string something_to_print = "Hello World!\n";
    timer some_timer([&]() { printf(something_to_print.c_str()); });
    some_timer.call();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果移动或复制 lambda,我看不到程序集有任何差异。它有什么区别吗?

c++ lambda move-semantics

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