相关疑难解决方法(0)

C++的纯虚函数实现和头文件

当有问题的类被分成*.h和时,我在实现从一些抽象类继承的纯虚函数时遇到了一些麻烦*.cpp.compiler(g++)告诉我,由于纯函数的存在,派生类无法实例化.

/** interface.h**/
namespace ns
{
    class Interface {
        public:
            virtual void method()=0;
    }
}

/** interface.cpp**/
namespace ns
{
    //Interface::method()() //not implemented here
}

/** derived.h **/
namespace ns
{
    class Derived : public Interface {
        //note - see below
    }
}

/** derived.cpp **/
namespace ns
{
    void Derived::Interface::method() { /*doSomething*/ }
}

/** main.cpp **/
using namespace ns;
int main()
{
    Interface* instance = new Derived; //compiler error
}
Run Code Online (Sandbox Code Playgroud)

这是否意味着我必须两次声明 …

c++ inheritance abstract pure-virtual

11
推荐指数
2
解决办法
3万
查看次数

`Base*b = new Base;`vs`Base*b = new Base();`没有定义我自己的构造函数

如果我没有定义我自己的构造函数,那么Base *b = new Base;vs 之间有什么区别Base *b = new Base();吗?

c++ constructor

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

在c ++ 11中,您是否可以(安全地)用空的初始化程序替换memset()初始化?

我经常在代码中遇到POD结构,这些结构是手动零初始化的,memset如下所示:

struct foo;
memset(&foo, 0, sizeof(foo));
Run Code Online (Sandbox Code Playgroud)

我检查了C++ 11标准,它说:"一个对象,其初始化器是一组空的括号,即(),应该进行值初始化." 接下来是: "对T类型的[pod结构]进行值初始化意味着...对象被零初始化."

所以......这是否意味着您可以随时安全地将上述代码压缩为以下代码:

struct foo{};
Run Code Online (Sandbox Code Playgroud)

并且有一个保证初始化的结构,就好像你已经调用了一样memset(&foo, 0, ...)


如果是这样,那么一般来说,你可以使用空的初始化器安全地初始化任何东西,如下所示:

SomeUnknownType foo{};  // will 'foo' be completely "set" to known values?
Run Code Online (Sandbox Code Playgroud)

我知道在C++ 03中(在统一初始化语法之前)并不总是可行的,但现在C++ 11中是否可以用于任何类型?

c++ uniform-initialization c++11

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

为什么C++原始类型没有像其他类型那样初始化?

我知道,在C++中,当你写作时

int i;
Run Code Online (Sandbox Code Playgroud)

在有效地为其赋值之前,您不能对变量将保持的值做任何假设.但是,如果你写

int i = int();
Run Code Online (Sandbox Code Playgroud)

那么你有保证i0.所以我的问题是,它实际上并不是语言行为的一种不完整性吗?我的意思是,如果我已经定义了一个类MyClass并且写了

MyClass myInstance;
Run Code Online (Sandbox Code Playgroud)

我可以放心,没有类参数的默认构造函数将被调用以初始化myInstance(如果没有,编译器将失败),因为这就是RAII原理的方式.但是,当涉及到原始类型时,资源获取似乎不再是初始化.这是为什么?

我不认为改变从C继承的这种行为会破坏任何现有的代码(世界上是否有任何代码假设不能对变量的值做出假设?),所以主要可能的原因我想到的就是性能,例如在创建基本类型的大数组时; 但是,我还想知道是否有一些官方解释.

谢谢.

c++ primitive constructor raii

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

C++指针数组初始化帮助

我在初始化指针数组时遇到了麻烦.我发现用gcc c ++(4.6.0)编译的是:

MyClass** a = new MyClass*[100];
Run Code Online (Sandbox Code Playgroud)

并不总是初始化指针数组.(大多数时候它确实给了我一个让我困惑的空指针数组)

MyClass** a = new MyClass*[100]();
Run Code Online (Sandbox Code Playgroud)

DOES将数组中的所有指针初始化为0(空指针).

我写的代码意味着可以在Windows/Linux/Mac/BSD平台上移植.这是gcc c ++编译器的一个特殊功能吗?还是标准的C++?它在标准中的位置是这样说的吗?

c++

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

为什么有这么多不同的方法在C++中使用new运算符

我刚刚在cplusplus.com上阅读了新的操作员说明.该页面给出了一个示例,演示了使用new运算符的四种不同方法:

// operator new example
#include <iostream>
#include <new>
using namespace std;

struct myclass {myclass() {cout <<"myclass constructed\n";}};

int main () {

   int * p1 = new int;
// same as:
// int * p1 = (int*) operator new (sizeof(int));

   int * p2 = new (nothrow) int;
// same as:
// int * p2 = (int*) operator new (sizeof(int),nothrow);

   myclass * p3 = (myclass*) operator new (sizeof(myclass));
// (!) not the same as:
// myclass * …
Run Code Online (Sandbox Code Playgroud)

c++ pointers new-operator

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

如何避免在thrust :: device_vector中默认构造元素?

  1. 似乎在创建一个新的Thrust向量时,默认情况下所有元素都是0 - 我只是想确认这种情况总是如此.

  2. 如果是这样,是否还有一种方法绕过负责此行为的构造函数以获得额外的速度(因为对于某些向量,我不需要它们具有初始值,例如,如果它们的原始指针作为输出传递给CUBLAS) ?

c cuda gpgpu thrust

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

C++ new*char不是空的

我有一个问题.

我在ASIO中开发服务器,数据包是尖头char.

当我创建新的char(例如char * buffer = new char[128];)时,我必须手动将其清理为空值.

通过:

for(int i =0;i<128;i++)
{
buffer[i] = 0x00;
}
Run Code Online (Sandbox Code Playgroud)

我做错了,那个字母不清楚?

c++ null pointers char

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

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

当用于初始化"new"时,()和{}总是等效吗?

在使用new时,有一个帖子在类型名称之后处理括号或不处理括号.但是这个怎么样:

如果'Test'是一个普通的类,那么之间有什么区别:

Test* test = new Test();
// and
Test* test = new Test{};
Run Code Online (Sandbox Code Playgroud)

此外,假设Test2有一个类型参数的构造函数Value,它总是等于写:

Value v;
Test2 *test2 = new Test(v);
// and
Test2 *test2 = new Test{v};
Run Code Online (Sandbox Code Playgroud)

c++ constructor initialization new-operator c++11

8
推荐指数
3
解决办法
1651
查看次数