小编for*_*818的帖子

如何递归遍历目录以删除具有特定扩展名的文件

我需要递归遍历一个目录并删除扩展名为.pdf和.doc的所有文件,我正在设法循环遍历一个目录,但没有设法过滤带有上述文件扩展名的文件.

我的代码到目前为止

#/bin/sh

SEARCH_FOLDER="/tmp/*"

for f in $SEARCH_FOLDER
do
    if [ -d "$f" ]
    then
        for ff in $f/*
        do      
            echo "Processing $ff"
        done
    else
        echo "Processing file $f"
    fi
done
Run Code Online (Sandbox Code Playgroud)

我需要帮助才能完成代码,因为我无处可去.

bash

146
推荐指数
8
解决办法
23万
查看次数

我应该为`size_t`包含哪个标题?

根据cppreference.com size_t定义的几个标题,即

<cstddef>
<cstdio>
<cstring>
<ctime>
Run Code Online (Sandbox Code Playgroud)

而且,从C++ 11开始,也在

<cstdlib>
<cwchar> 
Run Code Online (Sandbox Code Playgroud)

首先,我想知道为什么会这样.这与DRY原则是否相矛盾?但是,我的问题是:

我应该使用上面哪个标题来使用size_t?它有关系吗?

c++ typedef

82
推荐指数
4
解决办法
4万
查看次数

*(&amp;arr + 1) - arr 如何给出数组大小

int arr[] = { 3, 5, 9, 2, 8, 10, 11 };      
int arrSize = *(&arr + 1) - arr;
std::cout << arrSize;
Run Code Online (Sandbox Code Playgroud)

我不知道这是如何工作的。所以任何人都可以帮助我解决这个问题。

c++ arrays

36
推荐指数
4
解决办法
3430
查看次数

“不是必需的”== 未定义的行为?

我的问题主要是关于术语以及如何解释标准。

[expr.rel]#4 :

比较指向对象的不等指针的结果是根据符合以下规则的偏序定义的:

(4.1) 如果两个指针指向同一个数组的不同元素,或者指向其子对象,则要求指向下标较高的元素的指针比较大。

(4.2) 如果两个指针递归地指向同一对象的不同非静态数据成员,或指向此类成员的子对象,则要求后面声明的成员的指针比较大,前提是这两个成员具有相同的访问控制( [class.access]),两个成员都不是零大小的子对象,它们的类也不是联合。

(4.3) 否则,两个指针都不需要比较大于另一个。

我对如何解释(4.3)有点困惑。这是否意味着这

#include <iostream>
int main() {
    int x;
    int y;
    std::cout << (&x < &y);
    std::cout << (&x < &y);
}
Run Code Online (Sandbox Code Playgroud)

是...

  • 有效的 C++ 代码,输出为1100
  • 无效代码,因为它具有未定义的行为

?

换句话说,我知道(4.3)确实适用于此,但我不确定其含义。当标准说“它可以是 A 或 B”时,这与说“它是未定义的”相同吗?

c++ pointers undefined-behavior comparison-operators language-lawyer

32
推荐指数
2
解决办法
2586
查看次数

如何防止从int到unsigned int的隐式转换?

假设你有这个:

struct Foo {
    Foo(unsigned int x) : x(x) {}
    unsigned int x;
};

int main() {
    Foo f = Foo(-1);     // how to get a compiler error here?
    std::cout << f.x << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

是否有可能阻止隐式转换?

我能想到的唯一方法是explicilty提供一个构造函数,int如果int是负数,则会产生并产生某种运行时错误,但如果我为此得到编译器错误会更好.

我几乎可以肯定,有一个重复,但我能找到的最接近的是这个问题,而不是为什么允许隐式转换.

我对C++ 11和pre C++ 11解决方案感兴趣,最好是两者兼容.

c++ implicit-conversion unsigned-integer

30
推荐指数
3
解决办法
2889
查看次数

为什么`<< std :: endl`没有调用我希望它调用的运算符?

我一直在寻找一种解决方案来同时写入文件和控制台.我发现了一个很好的解决方案在这里.

当我在C++ 11之前工作时,我不得不对Orbit中Lightness Races的代码进行一些小改动:

#include <iostream>
#include <fstream>
#include <string>

struct OutputAndConsole : std::ofstream
{
    OutputAndConsole(const std::string& fileName)
       : std::ofstream(fileName.c_str())   // constructor taking a string is C++11
       , fileName(fileName)
    {};

    const std::string fileName;
};

template <typename T>
OutputAndConsole& operator<<(OutputAndConsole& strm, const T& var)
{
    std::cout << var;    
    static_cast<std::ofstream&>(strm) << var;
    return strm;
};
Run Code Online (Sandbox Code Playgroud)

它很好地工作除了一个小东西需要困惑我.如果我像这样使用它:

int main(){
    OutputAndConsole oac("testLog.dat");
    double x = 5.0;
    oac << std::endl;
    static_cast<OutputAndConsole&>(oac << "foo \n" << x << "foo").operator<<(std::endl);  
    oac << "foo" << std::endl; …
Run Code Online (Sandbox Code Playgroud)

c++ operator-overloading

28
推荐指数
3
解决办法
2144
查看次数

等价和平等有什么区别?

C++中的等价和等式有什么区别?

有一个非常类似的问题在这里.但是,这个问题用标记,而我对C++上下文中的含义感兴趣.

要查看上下文中的术语:Scott Meyers在此视频的示例中使用它们.

c++ equality equivalence

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

当A和B“相同”时断言(sizeof(A)== sizeof(B))是否安全?

假设我有两个类,它们的内存布局应该完全相同:

struct A {
    int x;
    int y;
};

/* possibly more code */

struct B {
    int a;
    int b;
};
Run Code Online (Sandbox Code Playgroud)

标准中是否有什么可以保证我可以安全地使用static_assert(sizeof(A) == sizeof(B))

作为较弱的变体,请考虑

struct C {
    int a;
};

static_assert( sizeof(A) >= sizeof(C) );   // can this ever fail?
static_assert( sizeof(A) >  sizeof(C) );   // can this ever fail?
Run Code Online (Sandbox Code Playgroud)

这个问题引发了这个问题。我天真地希望不会有任何断言失败,但是可以保证吗?

c++ sizeof language-lawyer

18
推荐指数
1
解决办法
501
查看次数

如何清除载体但保持其容量?

我试图修复一些使用向量的代码,并且有一些循环看起来像这样:

for (int t=0;t<T;t++){    
    std::vector<double> vect;
    for (int i=0;i<MAX;i++){
        double value;
        vect.push_back(value);
    }
    /*....*/
}
Run Code Online (Sandbox Code Playgroud)

我或多或少知道如何通过重复使用相同的向量进行外部迭代来改进这一点,但在这样做时我发现当调用std::vector::clear "向量容量不能保证改变"时,我实际上希望能够保证容量不要改变 也许我只是误解了cplusplus.com上的内容.但是,我的问题是:

如何在不改变容量的情况下清除矢量?

我应该叫reserveclear,以确保产能一样吗?

PS:为了清楚,我想重写上面的代码

std::vector<double> vect;
vect.reserve(MAX);
for (int t=0;t<T;t++){    
    for (int i=0;i<MAX;i++){
        double value;
        vect.push_back(value);
    }
    /*....*/
    vect.clear();
}
Run Code Online (Sandbox Code Playgroud)

即.我仍然希望填充它push_back,我担心clear()改变矢量的容量.

c++ vector

17
推荐指数
2
解决办法
4239
查看次数

防止切片的惯用方式?

有时,c ++默认允许切片可能会令人烦恼。例如

struct foo { int a; };
struct bar : foo { int b; };

int main() {
    bar x{1,2};
    foo y = x; // <- I dont want this to compile!
}
Run Code Online (Sandbox Code Playgroud)

将编译并按预期运行!但是,如果我不想启用切片怎么办?

什么是惯用的写法,foo以至于无法对任何派生类的实例进行切片?

c++ inheritance object-slicing

17
推荐指数
2
解决办法
990
查看次数