小编P45*_*ent的帖子

是否在函数参数列表中传递未初始化的变量?

我有一些代码,基本上归结为以下内容:

void bar(bool b, double f)
{
    if (b){
        double g = f;
    }
}

void foo()
{
    double f;
    bool b = false;
    bar(b, f);
}
Run Code Online (Sandbox Code Playgroud)

这里有任何未定义的行为吗?我怀疑有可能是因为我走的是未初始化的值复制double路过时fbar.也就是说,我没有使用传递,double因为if块不会运行.

此外,如果我double通过参考,一切都会好的:

void bar(bool b, double& f)
Run Code Online (Sandbox Code Playgroud)

然后我不是"使用"一个未初始化的变量,而只是指它.

c++ language-lawyer

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

如果我指定多个,则使用哪个`main`

除了其他几个,以下是有效的原型main():

  1. int main(void)

  2. int main(int, char**)

在C中,我们不能重载函数,因此永远不可能同时使用这两者.但在C++中并非如此.如果我在编译的C++可执行文件中同时使用哪一个,那么使用哪一个?它取决于命令行吗?标准说什么?

c++

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

抛出catch(...)是按值还是按引用抛出

我的老板回答了这个问题为什么......挡块中存在......(三分)?相当优雅.

但这让我想到了一些事情(希望能弥补我之前的不好问题),确实如此

catch(...){
    throw;
}
Run Code Online (Sandbox Code Playgroud)

通过(即采用深拷贝)或通过引用重新抛出捕获的异常?

c++

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

从已知大小的double*数组构造std :: vector <double>

我有一个指向double数组的第一个元素的指针:double* p.

我也知道数组的长度:n.

有没有办法可以将其复制到一个std::vector?最好使用构造函数和分配器.我想做点什么

std::vector<double> v = std::vector(p, n);
Run Code Online (Sandbox Code Playgroud)

但无法弄清楚哪个构造函数最接近于此.我正在使用C++ 11.

c++ initialization vector c++11

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

使用移动语义将基类实例推送到子类实例

假设我有一个实例化的Base b.Foo是一个儿童班Base.

我想要做的是拥有一个构造函数 Foo

class Foo : public Base
{
    Foo(Base b, T otherArg) : Base(b)
    {
        /*ToDo - do something with otherArg*/
    }
}
Run Code Online (Sandbox Code Playgroud)

'b'实例移动Foo正在构造的实例.如果构造Foo失败(例如在我的/*ToDo step*/),则b不应移动.

我可以在C++ 11中这样做吗?(我付不起深刻的副本).构造函数原型需要Foo(Base&& b, T otherArg)吗?

c++ c++11

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

是否初始化了一个静态char []缓冲区

我在文件范围内有这个:

static char foo[256];

是否在所有平台和构建配置上将内存初始化为零?(即它是标准C++).

c++

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

从 GNUMakeFile 调用 Windows 批处理文件

我在一个文件夹中有一个 GNUMakeFile(具有该名称),还有一个run.bat写入标准输出的批处理文件。

如何从 GNUMakeFile 调用该批处理文件?

我试过了,@CALL run.bat但似乎不支持 CALL 命令。

cmd run.bat 只是将 cwgwin 终端置于一种“混合 DOS 状态”。

cygwin gnu-make

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

std :: unique_ptr结构成员的结构类型

struct A
{
    std::unique_ptr<A> a;
};
Run Code Online (Sandbox Code Playgroud)

标准允许的?我不认为这是容器类型,如std::set,但有什么特别的unique_ptr

c++ unique-ptr

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

引入新变量会导致返回值优化吗?

我们都知道

Foo returnAFoo()
{
    return Foo();
}
Run Code Online (Sandbox Code Playgroud)

将使用返回值优化进行编译,因此即使复制构造函数Foo具有副作用,也不会获取值副本.但愿意

Foo returnAFoo()
{
    Foo f = Foo();
    return f;
}
Run Code Online (Sandbox Code Playgroud)

太?调试时,第二个结构可能会有所帮助.但是我这样做会丢掉一个重要的优化吗?也许我需要编写一个显式的移动构造函数?

c++ rvo nrvo

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

std::vector&lt;int&gt; 上的调整大小是否将新元素设置为零?

考虑

#include <vector>
int main()
{
    std::vector<int> foo;
    foo.resize(10);
    // are the elements of foo zero?
}
Run Code Online (Sandbox Code Playgroud)

元素foo全为零吗?我认为它们是从 C++11 开始的。但想确切地知道。

c++ integer stdvector value-initialization c++11

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