小编Jor*_*nar的帖子

C++ 中“for”循环的范围规则与 C 中不同?

我注意到 C 和 C++ 的循环范围规则for不同。
例如,下面的代码在 C 编译器中合法,但在 C++ 编译器中不合法。

for (int i = 0; i < 10; ++i) {
    int i = 5;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码在 C 中有效,但在 C++ 中给出了重新定义错误。
我的猜测是,C 编译器将循环视为循环内有另一个作用域,如下所示。

for (int i = 0; i < 10; ++i) {
    {
        int i = 5;
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么 C 编译器允许在循环范围内定义第二个同名变量?这样做有什么特别的原因或优势吗?

c c++ scope for-loop

20
推荐指数
1
解决办法
578
查看次数

std::move 在不同编译器上的行为不同?

我正在尝试使用一个简单的代码来计算余弦相似度:

#include <iostream>
#include <numeric>
#include <array>
#include <cmath>

float safe_divide(const float& a, const float& b) { return b < 1e-8f && b > -1e-8f ? 0.f : a / b; }

template< size_t N >
float cosine_similarity( std::array<float, N> a, std::array<float, N> b )
{
    const float&& a2 = std::move( std::inner_product( a.begin(), a.end(), a.begin(), 0.f ) );
    const float&& b2 = std::move( std::inner_product( b.begin(), b.end(), b.begin(), 0.f ) );
    const float&& dot_product = std::move( std::inner_product( a.begin(), a.end(), b.begin(), 0.f …
Run Code Online (Sandbox Code Playgroud)

c++ gcc g++ clang

8
推荐指数
1
解决办法
350
查看次数

使用临时对象而不将其存储在变量中

让我们举一个例子,我们需要将从一个函数返回的向量插入到另一个向量中:

const std::vector<int> getvec(){
    return {1, 2, 3};
}

// in main...
std::vector<int> foo{ 11, 12 };
auto bar = getvec();
foo.insert(foo.end(), bar.begin(), bar.end());
Run Code Online (Sandbox Code Playgroud)

由于该bar变量需要在方法中引用两次,insert()因此有必要将向量存储为变量(如果foo.myinsert(getvec())有这样的接口,我们也可以这样做)。

让我有点恼火的是,在这种情况下,我们需要foo在主作用域中引入一个变量,该变量不应在其余代码中再次使用,因为它占用内存并污染命名空间。如果我们谈论的是一个大的“临时”对象,这尤其是一个问题。

有没有标准的方法来处理这个问题?我们可以定义一个仅接受“临时”对象一次的函数,以便我们可以直接将函数输出提供给它,但如果我们需要为每个类似的场景定义这样的函数,那么将很难管理。同样在这个例子中,我们无法为vector类定义成员函数。

或者使用大括号来限制插入的“临时”部分的范围,但我想知道这里是否有任何警告。

vector<int> foo{ 11, 12 };
{ // extra brace here
    auto bar = getvec();
    foo.insert(foo.end(), bar.begin(), bar.end());
} // extra brace here
Run Code Online (Sandbox Code Playgroud)

c++ temporary

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

如何升级到 C++17?

我使用 Atom 作为我的 IDE,我当前__cplusplus = 201402是 C++14,我的编译器是g++ (GCC) 9.2.0

如何升级到 C++17 或 C++20?

我搜索的所有内容都涉及使用另一个 IDE(Microsoft Visual Studio)。

c++ compiler-flags atom-editor c++17

4
推荐指数
2
解决办法
6862
查看次数

如何查找目录中多个文件的数量和总大小?

我有一个目录,里面有多个目录,其中包含多种类型的文件。

我想找到*.jpg文件,然后获取所有单个文件的数量和总大小。

我知道我必须使用find wc -landdu -ch 但我不知道如何将它们组合在单个脚本或单个命令中。

find . -type f name "*.jpg" -exec- 不知道如何连接这三个

linux bash shell redhat sh

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

将对象数组的引用传递给函数

我正在尝试更改数组中对象的参数,但是当我将它传递给函数时,它似乎正在创建一个新参数。

我已经看到了类似的问题和答案,这一个,但它不为我工作,因为我没有在最后的代码固定的数组的大小。

我创建了一个非常简短的代码版本来显示问题。

#include <iostream>

using namespace std;

class Vect {
public:
    Vect(int x, int y)
    {
        _x = x;
        _y = y;
    }

    int _x;
    int _y;
};

void ChangeX(Vect tests[], int size)
{
    for (int i = 0; i < size; i++) {
        tests[i]._x = 39;
    }
}

int main()
{

    Vect v1 = Vect(1,2);
    Vect v2 = Vect(6,3);
    cout << "Initial X: ";
    cout << v1._x;
    cout << "\n";

    Vect vectors[2] = { v1, …
Run Code Online (Sandbox Code Playgroud)

c++ arrays arduino arduino-c++

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

我可以通过信标发送传感器(几个字节)吗?

我想通过 BLE 将一些传感器数据发送到多个节点。
我想到了以4Hz改变广告数据。能做到吗?

stm32 bluetooth-lowenergy beacon

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

cout/cin 在内部调用 printf() / scanf() 是否像 `new` 调用 malloc 一样?

我已经在互联网上查过了。我找到了很多比较cinvsscanf()coutvs 的答案printf(),但从来没有发现是否cinscanf()内部实际使用newC++ 中的运算符使用 C 的malloc()函数。

c++ implementation

0
推荐指数
1
解决办法
159
查看次数

尝试导入错误:“configureStore”未从“./app/store”导出

我的store.js

import { configureStore } from "@reduxjs/toolkit";
import userReducer from "../features/userSlice";

export default configureStore({
  reducer: {
    user: userReducer,
  },
});
Run Code Online (Sandbox Code Playgroud)

我应该导入什么index.js
表明:Attempted import error: 'configureStore' is not exported from './app/store'

import React from "react";
import ReactDOM from "react-dom";
import "./index.css";
import App from "./App";
import { configureStore } from "./app/store";
import { Provider } from "react-redux";

ReactDOM.render(
  <React.StrictMode>
  Provider configureStore={configureStore}>
  <App/>
  </Provider>
  </React.StrictMode>,
  document.getElementById("root")
);
Run Code Online (Sandbox Code Playgroud)

javascript rxjs reactjs react-redux

0
推荐指数
1
解决办法
5616
查看次数

为什么 C 对 stdin/stdout 流以及文件操作使用 FILE?

我最近研究了 C 中的文件和输入/输出,很快发现 C 使用一种typedefed 结构FILE,通常表示为指向结构的指针。
该结构包含有关输入和输出的数据,因此操作系统和内核的较低级别部分可以轻松管理系统上的输入和输出,例如输入数据的大小、数据类型等。基本上,它是有目的地抽象
的因为它的工作方式非常低级。

我还知道FILE* xC 程序员通常使用类似的东西来表示输入和输出流。C 还允许FILE常用来指向文件。

为什么C允许程序员使用CFILE来表示文件以及输入/输出流?对我来说,这听起来非常令人困惑,而且这个关键字的字面意思FILE是这样FILE的,我认为它经常会让新程序员感到困惑,认为它仅用于指向文件。

那么为什么FILE同时用于文件和输入/输出呢?

c file-io file

0
推荐指数
1
解决办法
337
查看次数