草庐IT

c++ - 调用基本构造函数时是否应该复制继承构造函数的参数?

对于以下程序:#includestructFoo{Foo(){std::cout海湾合作委员会提供:$g++-std=c++17-O2-Wall-pedantic-pthreadmain.cpp&&./a.outFoo()Foo(constFoo&)~Foo()~Foo()VS2017(也在C++17模式下)给出:Foo()Foo(constFoo&)Foo(constFoo&)~Foo()~Foo()~Foo()谁是对的,为什么?(我们也不要忘记VS2017没有正确执行强制复制省略。所以它可能只是拷贝是“真实的”,但GCC根据C++17规则省略了它,而VS没有...)

C++ 编译错误枚举 "does not name a type"

以下代码:foo.h#include"bar.h"classfoo{public:enummy_enum_type{ONE,TWO,THREE};foo();~foo(){}};foo.cppfoo::foo(){inti=bar::MY_DEFINE;}酒吧.h#include"foo.h"classbar{public:staticconstintMY_DEFINE=10;foo::my_enum_typevar;bar(){};~bar(){};};让g++编译器提示my_enum_type“没有命名类型”。为什么?所有header都有多个包含定义(为清楚起见,此处未显示)。谢谢

c++ - 使用 placement new 在构造函数中调用构造函数

这几天很挣扎。问题是构造函数调用。我写了一段代码:#includeusingnamespacestd;classFoo{private:int_n;public:Foo(){Foo(5);}Foo(intn){_n=n;cout当我使用默认构造函数在外部构造一个Foo对象时:Foo*f=newFoo();我假设变量_n是5,然而,它不是。在Java中可以,但在C++中不行。此外,在VisualC++6sp6中,Foo(){this->Foo(5);}有效。然而,这个表达式被gcc/g++4拒绝。最后,我找到了解决办法。只需将默认构造函数更改为Foo(){Foo(5);}进入Foo(){

c++ - 如何使用静态 C++ 库扩展 Lua?

我有一个使用Lua5.2.1的VisualStudio2008C++03应用程序。我想用一个名为“foo”的模块扩展Lua,但是当我在我的Lua脚本中调用require("foo")时,出现错误:foo_test.lua:1:module'foo'notfound:nofieldpackage.preload['process']nofile'!\lua\process.lua'nofile'!\lua\process\init.lua'nofile'!\process.lua'nofile'!\process\我的Lua脚本:foo.bar()我的lua_foo.h文件:#inclu

c++ - 在不同的命名空间中测试特定的类名(SFINAE?)

假设我在不同的命名空间中有几个同名的类。namespaceA{classFoo{...};}namespaceB{classFoo{...};}namespaceC{classFoo{...};}如果类名为Foo,我想在编译时进行检测尽管命名空间。例如一些SFINAE类,templatestructis_Foo{staticconstboolvalue=/*somemagichere*/;};那我要is_Foo::value是真的,is_Foo::value是真的,is_Foo::value是假的。然后,我想使用is_Foo在static_assert或std::enable_if.可

c++ - 如何将 unique_ptr 移出 vector<unique_ptr<Foo>>?

我想搬一个unique_ptr从一个vector>.考虑我的代码:#include#include#includeusingnamespacestd;classFoo{public:intx;Foo(intx):x(x){};~Foo(){cout>();foos.push_back(unique_ptr(newFoo(100)));foos.push_back(unique_ptr(newFoo(101)));foos.push_back(unique_ptr(newFoo(102)));//Printallcoutxxx我预计它会产生:Vectorsize:3100101102Re

c++ - 跨基类解决虚方法重载

VisualStudio2013。给定:classbase_1{public:virtualvoidfoo(int)=0;};classbase_2{public:virtualvoidfoo(int,double)=0;};classjoin_1_2:publicvirtualbase_1,publicvirtualbase_2{};我有一个水槽:voidsink(join_1_2¶m){param.foo(42,3.14);}但我得到以下编译器错误:errorC2385:ambiguousaccessof'foo'couldbethe'foo'inbase'base_1'o

c++ - 默认多个参数

我有一个如下所示的类:classExample{Foo1f1;Foo2f2;Foo3f3;size_thash;};请注意FooX总是不同的类。我想添加一个构造函数,它将值分配给每个fX元素并计算哈希值(用于缓存其值)。但是我希望能够省略任意数量的参数并为类的相应成员分配默认值。显然我可以使用C++的默认功能:示例(Foo1f1=DEFAULT4F1,Foo2f2=DEFAULT4F2,Foo3f3=DEFAULT4F3);但是,为了能够省略f2,我需要省略我可能想要指定的f3。然后我可以为每个可能的顺序编写一个构造函数,但是构造函数的数量随着元素的阶乘而增长,因此对于这种情况:Exa

C++ 类使用未定义类型

我有一个我制作的类,我在类上方的线程中使用它。即使我在顶部做了一个类的原型(prototype),它仍然会抛出这些错误错误C2027:使用了未定义的类型“foo”classfoo;DWORDWINAPIdemo(LPVOIDparam){fooa;}classfoo{public:intx;}; 最佳答案 EventhoughIdidaprototypeoftheclass用forwarddeclaration您可以创建指向该类的指针和引用。这是因为指针/引用在所有类/结构/等中表示相同。它们都只是内存地址。因此,例如,您可以创建第

c++ - 是否可以在 C++ 中声明 operator= private 并同时由编译器合成

我对运算符=很满意,它由编译器自动合成。但我希望它是私有(private)的,并且不想用类型的页面长定义来膨胀我的代码Foo&Foo::operator=(constFoo&foo){if(this==&foo)return*this;member1_=foo.member1_;member2_=foo.member2_;member3_=foo.member2_;...member1000_=foo.member1000_;return*this;}请问有什么办法吗? 最佳答案 在C++11中是:classFoo{Foo&oper