小编ont*_*cks的帖子

在哪里释放在函数内创建的动态数组的内存

这是参考本主题中的讨论, 如何将char指针作为C++函数的out参数

在下面的代码中,我在哪里释放pTemp的内存?这不是必需的吗?如果不是字符数组而不是整数数组,事情会不会发生变化?

void SetName( char **pszStr )
{
    char* pTemp = new char[10];
    strcpy(pTemp,"Mark");
    *pszStr = pTemp;
}

int main(int argc, char* argv[])
{
    char* pszName = NULL;
    SetName( &pszName );
    cout<<"Name - "<< pszName << endl;
    delete [] pszName;
    cin.get();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ local-variables delete-operator

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

如何检查三个值是全部为0还是全部为1

有3个整数变量,其值可以是0或1.如果全部为0或全部为1,则打印特定语句.对于所有其他值组合,打印另一个语句.

我尝试了下面的工作.是否有更好的方法来编写if语句?

#include <iostream>
using namespace std;

int main()
{
    int a, b, c;
    cin >> a >> b >> c;

    if(!(a != 0 && b != 0 && c != 0) && !(a == 0 && b == 0 && c == 0))
    {
        cout << "a, b or c have mixed values of 1 and 0" << endl;
    }
    else
    {
        cout << "All of a, b and c are either 1 or 0" << endl;
    }

    system("pause"); …
Run Code Online (Sandbox Code Playgroud)

c++

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

将静态成员数组初始化为零

请参阅此处的文件http://www.open-std.org/Jtc1/sc22/wg21/docs/papers/2011/n3242.pdf

"具有静态存储持续时间(3.7.1)或线程存储持续时间(3.7.2)的变量应在任何其他初始化发生之前进行零初始化(8.5)"

如果我拥有所有内容,即单个文件中的类声明和main()(必须),我应该能够省略初始化.但是,如果我省略,我在构建期间会出现"未定义的引用"错误.

#include <iostream>
using namespace std;

class foo
{
    public:
        static int array[2];
};

int foo::array[2] = {0}; //I should be able to omit this line

int main()
{
    cout << "foo::array[0] = " << foo::array[0] << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

PS:没有C++ 11

c++ arrays static

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

哪个是更好的Get成员方法?

我有一个类有成员的类 std:vector

  private:
     std::vector<int> myVector;
Run Code Online (Sandbox Code Playgroud)

我创建了Get方法来访问 myVector

1. const std::vector<int>   GetMyVector() const;
2. const void   GetMyVector(std::vector<int>& vec) const;
Run Code Online (Sandbox Code Playgroud)

实现分别如下:

1. const std::vector<int> MyClass::GetMyVector() const
   {
       return  myVector;
   }

2. const void MyClass::GetMyVector(std::vector<int>& vec) const
   {
       vec =  myVector;
   }
Run Code Online (Sandbox Code Playgroud)

两种Get方法中哪一种更好,为什么?

c++ class vector accessor stdvector

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

从函数返回值 - 为什么它起作用?

以下是一个返回整数的简单函数定义

int myFunc()
{
    int localVar = 99;
    return localVar;
}
Run Code Online (Sandbox Code Playgroud)

它主要称为

int main()
{
    int y = myFunc();
    cout << y << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这按预期工作.我想知道为什么? localVar是一个局部变量,其值在堆栈中分配.一旦功能结束,它就会超出范围.那么,localVar在调用范围内会超出范围int y = myFunc();如何/为什么它仍然能够返回正确的值?

c c++ return function return-value

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

删除矢量类成员

我有一个带有成员的A类,它是另一个B类的对象指针的向量

class A
{
    std::vector<B*> m_member_A
Run Code Online (Sandbox Code Playgroud)

m_member_A通过使用new运算符创建B的对象来填充

B* b1 = new B;
m_member_A.push_back(b1);
Run Code Online (Sandbox Code Playgroud)

在A的析构函数中,以下是否正确释放所有内容?

A::~A()
{
    for(int i = 0; i < m_member_A.size(); ++i)
    {
        delete m_member_A[i];
    }

    m_member_A.clear();
}
Run Code Online (Sandbox Code Playgroud)

c++ destructor class vector member

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

整数到枚举转换的static_cast

有一些函数将枚举作为参数

void myfunc(myEnum input);
Run Code Online (Sandbox Code Playgroud)

据我了解,如果必须为此函数提供一个整数,建议将其显式转换为枚举,原因是所有整数可能都不是有效的枚举值。

根据MSDN

“ static_cast运算符可以将整数值显式转换为枚举类型。如果整数类型的值不在枚举值的范围内,则所得的枚举值不确定。”

并按照C ++标准5.2.9静态转换-> 10

“整数或枚举类型的值可以显式转换为枚举类型。如果原始值在枚举值(7.2)的范围内,则该值不变。否则,结果值未指定(并且可能不在该范围)。”

那么static_cast在这种情况下使用的意义是什么?是否有一些选项会引发超出枚举范围的值的异常(除了为此编写显式代码)?

c++ enums casting static-cast

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

使用 $CI_JOB_ID 作为 Gitlab 管道多个阶段的常量

我有以下内容

\n
stages:\n    - stage1\n    - stage2\nvariables:\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0    MY_ENV_VAR:\xc2\xa0env_$CI_JOB_ID\nstage1_build:\n    stage: stage1\n    script:\n        - echo $MY_ENV_VAR\nstage2_build:\n    stage: stage2\n    script:\n        - echo $MY_ENV_VAR\n
Run Code Online (Sandbox Code Playgroud)\n

$MY_ENV_VAR我在两个阶段得到不同的值(这意味着$CI_JOB_ID每个阶段都有变化)。

\n

我想要的是设置$MY_ENV_VAR一次 的一个值$CI_JOB_ID并将其设为常量,以便$MY_ENV_VAR在所有阶段使用相同的值。

\n

gitlab gitlab-ci gitlab-ci-runner

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

Perl qq和下划线

所以我有两个变量

$x = q(foo);
$y = q(bar);
Run Code Online (Sandbox Code Playgroud)

我的目标是在第三个变量中使用它们,它们之间有下划线即foo_bar.有很多方法可以做到这一点,但我想使用qq

所以

$z = qq($x_$y);
Run Code Online (Sandbox Code Playgroud)

这会产生以下错误

Global symbol "$x_" requires explicit package name at test.pl line 45.
Execution of C:\test.pl aborted due to compilation errors.
Run Code Online (Sandbox Code Playgroud)

所以我不得不使用大括号和变量x来使它工作

$z = qq(${x}_$y);
Run Code Online (Sandbox Code Playgroud)

为什么下划线不起作用qq?在这种情况下,为什么我需要大括号?

string quotes perl

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

pathlib mkdir 按文件名创建文件夹

我的机器中有以下预先存在的文件夹

D:\scripts\myfolder
Run Code Online (Sandbox Code Playgroud)

我希望我的脚本创建一个名为 的文件夹并在其中logs创建一个文件。log.txt所以路径看起来像

D:\scripts\myfolder\logs\somelog.txt
Run Code Online (Sandbox Code Playgroud)

所以我用了

p = pathlib.Path("D:\scripts\myfolder\logs\somelog.txt")
p.mkdir(parents=True, exisit_ok=True)
Run Code Online (Sandbox Code Playgroud)

现在

print(p.parents[0])==>D:\scripts\myfolder\logs

print(p.parents[1])==>D:\scripts\myfolder

print(p.parents[2])==>D:\scripts

因此,根据Path.mkdir文档 p.mkdir(parents=True, exisit_ok=True)应该创建文件夹logsmyfolder或者scripts等等(如果它们不存在)。

some.txt但它会按inside文件夹的名称创建一个文件夹logs,尽管它不是parents. 为什么会这样?

我知道解决方法是使用pathlib.Path("D:\scripts\myfolder\logs")

python-3.x pathlib

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

派生类构造函数初始值设定项列表中的基类默认构造函数

我见过很多次人们在派生类构造函数初始值设定项列表中添加基类的默认构造函数,如下所示

DerivedClass::DerivedClass(int x) : BaseClass(), member_derived(x)
{
    //Do something;
}
Run Code Online (Sandbox Code Playgroud)

派生类构造函数默认调用基类的默认构造函数。BaseClass()上面的初始化列表中的是多余的吗?

c++ constructor derived-class default-constructor

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

纯虚方法必须只在直接派生类中实现 - 为什么?

假设有一个抽象类A和两个类BC衍生自AB分别

class A
{
    virtual void print() = 0;
};

class B : public A
{
    void print(); 
};

//print() must be implemented
void B::print()
{
    std::cout << "Hello" << std::endl;
}

class C : public B
{
    //print() does not require to be implemented
};
Run Code Online (Sandbox Code Playgroud)

我理解,C从其直接父级的角度来看B,print()不是纯粹的虚方法,但是从C祖父母的角度来看A,print()是一种纯虚方法.那么,它不应该也需要实施C吗?

c++ class derived-class pure-virtual

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

printf - 具有固定宽度整数类型格式宏的原始字符串文字

如何将原始字符串文字R与固定宽度整数类型的格式宏一起使用?

例如

std::int64_t num = INT64_MAX;
std::printf(R"("name":"%s", "number":"%")" PRId64, "david", num); // wrong syntax
Run Code Online (Sandbox Code Playgroud)

输出应该是

"name":"david", "number":"9223372036854775807"
Run Code Online (Sandbox Code Playgroud)

R不允许使用转义序列代替

c++ printf string-literals

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