草庐IT

c++ - 使用 {} 报告未使用变量的统一初始化

使用g++4.7.0编译此代码(-Wall-Wextra-Werror-Wconversion-std=c++11):#include//std::cout,std::endl#include//std::string#include//std::movevoidout(std::stringconst&message){staticintcount{0};std::cout...导致以下错误:error:unusedvariable'bar'[-Werror=unused-variable]我可以通过将bar初始化更改为以下任何一项来消除错误:/*0*/autobar(std::mo

c++ - 如果仅部分重载重载函数,多态性将不起作用

今天我觉得自己像个菜鸟:classBase{public:virtualvoidfoo(int)=0;virtualvoidfoo(int,int){}virtualvoidbar(){}};classDerived:publicBase{public:virtualvoidfoo(int){}};voidmain(){Derivedd;d.bar();//worksd.foo(1);//worksd.foo(1,2);//compilererror:nomatchingfunctioncall}我希望d从Base继承foo(int,int),但它没有。那么我在这里缺少什么?

c++ - C++ 中的 goto 和 RAII

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Gotooutofablock:dodestructorsgetcalled?我知道C和C++中的goto运算符几乎在所有情况下都是无用的,但我想知道这个问题的答案只是出于兴趣,它没有实际意义。C++标准是否保证在这种情况下必须正确调用对象的析构函数?#includeclassFoo{public:Foo(){std::couthttp://liveworkspace.org/code/06031e6699c8fddda94b8594ccab1387那么goto和C++RAII的其他异常情况呢?如果您能在这里

c++ - 具有专门用于 C++ 的单一方法的模板类

我只有一个hpp文件用于C++的学校作业(我不允许添加cpp文件,声明和实现都应该写在文件中)。我在里面写了这段代码:templateclassMatrix{voidfoo(){//dosomethingforaTvariable.}};我想再添加一个foo方法,但是这个foo()将专门用于.我在一些地方读到我需要声明一个新的特化类(class)才能工作。但我想要的是专门的foo将位于原始foo的正下方,所以它看起来像这样:templateclassMatrix{voidfoo(Tx){//dosomethingforaTvariable.}templatevoidfoo(intx){

c++ - 使用作用域 queue::swap 清空 std::queue 是否违反任何规则?

我有很多使用队列的情况,队列的大小可以增长到数百个。不幸的是,如果有必要,没有清空队列的一次性解决方案。我想知道是否使用作用域队列进行交换,然后让作用域队列被销毁,是否会破坏任何内存分配/管理规则?以下片段是我所提议的示例。似乎有效,如果长时间使用多次,则不确定结果。#include#include#includeintmain(){std::queuefoo;foo.push(10);foo.push(20);foo.push(30);std::coutbar;swap(foo,bar);}std::cout 最佳答案 您的代码没

c++ - 为什么派生类重写了基类的方法,还要调用基类的方法?

考虑以下程序:classBase{public:virtualvoidfoo()const{cout如果我从Base类foo方法中删除const,则Derived::foo()是叫。我似乎无法理解这种行为。1)这种行为的原因是什么?2)这是编译时还是运行时决定的?谢谢 最佳答案 在派生类中,函数签名是这样的:virtualvoidfoo();//Derived::foo其中没有提到const。它是一个非常量成员函数,而Base::foo是一个const成员函数。它们是两个不同的函数,因为const是函数签名的一部分。virtualv

c++ - 打印任意 C++ 表达式的类型

我有兴趣编写一个用于教学目的的工具来计算C++表达式并打印它们的类型。本质上,我的想法是我的学生可以输入任何表达式,程序会回显表达式的类型。是否有现有工具可以执行此操作?如果没有,是否有一种非常简单的方法可以通过与现有编译器集成并调用其调试器或API来实现?例如,有人告诉我,Clang有一个相当完整的编译器API,也许有一些方法可以将字符串连同适当的include指令一起传递到Clang并让它吐出一个类型?我意识到,如果目前还没有类似的项目,这可能是一个巨大的项目。我只是认为它具有重要的教育值(value),所以它似乎值得一试。 最佳答案

c++ - 将私有(private)复制构造函数与公共(public)赋值运算符一起使用时出错

你们谁能解释一下为什么下面这段代码不能编译?#includeusingnamespacestd;classFoo{public:Foo(){cout我收到的错误:$g++-ocopy_ctor_assigncopy_ctor_assign.cc&&./copy_ctor_assigncopy_ctor_assign.cc:Infunction'intmain()':copy_ctor_assign.cc:10:error:'Foo::Foo(constFoo&)'isprivatecopy_ctor_assign.cc:17:error:withinthiscontext注意:当我删除

C++ 按返回类型重载函数

如果我认为我对C++有所了解,那就是你不能通过返回类型重载函数。那么谁能解释一下这里发生了什么?classA{public:typedefint_foo;};classB{};templatetypenameT::_fooFoo(int){couttypenameTFoo(char){cout(0);//Writes"Foo(int)",asexpected.Foo(0);//Writes"Foo(char),expectederrorunabletocompiletemplate.return0;}有两个类A和B,A定义了typedef_foo,B没有。函数模板Foo有两个重载,Fo

c++ - haskell FFI : Interfacing with simple C++?

就我目前所读的内容而言,将FFI与C++结合使用非常难以实现。最大的原因之一似乎是将C++对象转换为Haskell。我现在的问题是我没有任何C经验,但有几年C++经验,而且我更喜欢OOP。因此,自然而然地想从C++中受益。那么我可以编写专供HaskellFFI使用的C++程序来解决这些问题吗?C++可以在幕后做任何事情,但API会像C一样,即我不交换对象,没有重载的顶级函数等等。有什么需要注意的陷阱吗?(将我的项目与您可能熟悉的项目进行比较:考虑使用SciPy的Weave来加速Python代码。) 最佳答案 是的,如果您在C++代码