我有一些代码,基本上归结为以下内容:
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路过时f到bar.也就是说,我没有使用传递,double因为if块不会运行.
此外,如果我double通过参考,一切都会好的:
void bar(bool b, double& f)
Run Code Online (Sandbox Code Playgroud)
然后我不是"使用"一个未初始化的变量,而只是指它.
除了其他几个,以下是有效的原型main():
int main(void)
int main(int, char**)
在C中,我们不能重载函数,因此永远不可能同时使用这两者.但在C++中并非如此.如果我在编译的C++可执行文件中同时使用哪一个,那么使用哪一个?它取决于命令行吗?标准说什么?
我的老板回答了这个问题为什么......挡块中存在......(三分)?相当优雅.
但这让我想到了一些事情(希望能弥补我之前的不好问题),确实如此
catch(...){
throw;
}
Run Code Online (Sandbox Code Playgroud)
通过值(即采用深拷贝)或通过引用重新抛出捕获的异常?
我有一个指向double数组的第一个元素的指针:double* p.
我也知道数组的长度:n.
有没有办法可以将其复制到一个std::vector?最好使用构造函数和分配器.我想做点什么
std::vector<double> v = std::vector(p, n);
Run Code Online (Sandbox Code Playgroud)
但无法弄清楚哪个构造函数最接近于此.我正在使用C++ 11.
假设我有一个实例化的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)吗?
我在文件范围内有这个:
static char foo[256];
是否在所有平台和构建配置上将内存初始化为零?(即它是标准C++).
我在一个文件夹中有一个 GNUMakeFile(具有该名称),还有一个run.bat写入标准输出的批处理文件。
如何从 GNUMakeFile 调用该批处理文件?
我试过了,@CALL run.bat但似乎不支持 CALL 命令。
cmd run.bat 只是将 cwgwin 终端置于一种“混合 DOS 状态”。
是
struct A
{
std::unique_ptr<A> a;
};
Run Code Online (Sandbox Code Playgroud)
标准允许的?我不认为这是容器类型,如std::set,但有什么特别的约unique_ptr?
我们都知道
Foo returnAFoo()
{
return Foo();
}
Run Code Online (Sandbox Code Playgroud)
将使用返回值优化进行编译,因此即使复制构造函数Foo具有副作用,也不会获取值副本.但愿意
Foo returnAFoo()
{
Foo f = Foo();
return f;
}
Run Code Online (Sandbox Code Playgroud)
太?调试时,第二个结构可能会有所帮助.但是我这样做会丢掉一个重要的优化吗?也许我需要编写一个显式的移动构造函数?
考虑
#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 开始的。但想确切地知道。