相关疑难解决方法(0)

C struct是盒装类型时,C struct是unboxed吗?

正如许多书中所提到的,与C++结构和类的区别在于访问控制描述符.因此,我想知道以下陈述是否正确:

C中的struct是unboxed:struct中的成员明显位于分配struct的位置.但是C++中的struct是类似盒子的类型:members/headers位于其他地方,并且分配struct的地方包含指向members/headers的指针.

这种理解对吗?

是否可以在C++中创建一个未装箱的类型,它还包含实例方法?

c c++ struct

3
推荐指数
1
解决办法
395
查看次数

当一个结构有c-tor时,为什么我不能静态初始化它呢?

我的问题:当一个结构有c-tor时,为什么我不能静态初始化它?

我的编译器声称:

type `myStruct' must be initialized by constructor, not by `{...}'
Run Code Online (Sandbox Code Playgroud)

这是为什么 ?我正在使用gcc版本3.4.4(cygming special,gdc 0.12,使用dmd 0.125)

为了说明,这是struct编译器拒绝的.

struct myStruct
{
    int a;
    double b;

    myStruct() { a= 0; b = 0.0; }
}

void main()
{
    myStruct ms = {7, 7.7}; // Now this compiler does not accept.
} 
Run Code Online (Sandbox Code Playgroud)

c++ static constructor structure initialization

3
推荐指数
1
解决办法
357
查看次数

使初始化列表与 C++ 中的继承一起工作

下面的代码被编译在 g++ 4.6.3 for Linux

#include <iostream>

class A {
  public:  

    int x;
    std::string c;

    A(int x,std::string c):x(10),c("Hi"){
    }

    ~A(){
      std::cout << "Deleting A()" << std::endl;
    }
};

class B : public A {
  public:

    B():A(20,"Hello"){
    }

    ~B(){
      std::cout << "Deleting B()" << std::endl;
    }
};

int main(){
  B o;
  std::cout << o.x << std::endl;
  std::cout << o.c << std::endl;
  return(0);
}
Run Code Online (Sandbox Code Playgroud)

但它没有做应该做的事情,类型 B 无法更改它从 A 继承的那 2 个变量的值。

关于为什么这不能正常工作的任何解释?

c++ inheritance initializer-list

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

c ++在对象声明中分配对象

我来自Java背景,最近决定尝试创建一个"有趣"的C++ Qt GUI应用程序.我一直在努力解决Java和c ++之间的许多细微差别,但我学到了很多东西.

我试图在我的C++编码中尽可能地匹配"java风格"语法.虽然这可能是也可能不是C++的"最佳实践",但我觉得在学习保持熟悉且一致的语法时会有所帮助.其中一个java语法残留是这样的:

//Java
MyObject o = new MyObject();

//C++
MyObject o = MyObject();
Run Code Online (Sandbox Code Playgroud)

现在,我理解C++有上面的语法快捷方式:

//C++
MyObject o();
Run Code Online (Sandbox Code Playgroud)

这很好,但正如我所说,我不想使用不同的语法.一切都很好,但是当我尝试下面的Qt代码时,我收到了一个惊喜:

QString filepath = "C:\\somefile";
QFile file = QFile(filepath);
Run Code Online (Sandbox Code Playgroud)

并得到编译错误:

c:\QtSDK\Desktop\Qt\4.7.2\mingw\include/QtCore/qfile.h:195: error: 'QFile::QFile(const QFile&)' is private within this context
Run Code Online (Sandbox Code Playgroud)

我读了Qt文档,发现确实没有公共构造函数QFile :: QFile(const QFile&).我的代码以前用于其他类的地方,有这样的构造函数.我可以在这里猜测并说出这条线:

QFile file = QFile(filepath);
Run Code Online (Sandbox Code Playgroud)

实际上是调用两个构造函数.谁能解释一下?

c++ java qt

2
推荐指数
1
解决办法
2016
查看次数

用C++保存任何对象的数组?

有人可以告诉我并提供一个代码示例,说明是否可以在不使用c ++继承的情况下创建可以容纳任何类型对象的数组?我还没有编写任何代码,但是例如,如果我有两个类:RangedWeap和MeleeWeap,有没有办法将这些对象存储在同一个数组中而不使用继承?

c++ arrays class object

2
推荐指数
1
解决办法
992
查看次数

2
推荐指数
1
解决办法
2103
查看次数

如何理解这个POD规则

struct A
{
  int i;
};

struct B
{
 B(){} 
 int i;
}
Run Code Online (Sandbox Code Playgroud)

大家好

我知道"POD意味着普通旧数据类型,根据定义,它不能具有用户定义的构造函数".但是,当"定义具有用户定义的默认值"时,我无法理解为什么此规则有效.

它们的内存布局没有区别.为什么A类是POD,而不是B?

c++ constructor pod type-traits c++11

2
推荐指数
1
解决办法
265
查看次数

在 CUDA/thrust 中执行向量求和

因此,我尝试在 CUDA 中实现随机梯度下降,我的想法是对其进行并行化,类似于使用小批量的最佳分布式在线预测论文中描述的方式

该实现针对的是 MapReduce 分布式环境,因此我不确定它在使用 GPU 时是否是最佳选择。

简而言之,其想法是:在每次迭代时,计算批次(映射)中每个数据点的误差梯度,通过求和/减少梯度来取平均值,最后执行梯度步骤,根据平均梯度更新权重。下一次迭代从更新的权重开始。

推力库允许我对向量执行约简例如允许我对向量中的所有元素求和。

我的问题是:如何求和/减少 CUDA/thrust 中的向量数组?输入将是一个向量数组,输出将是一个向量,该向量是数组中所有向量的总和(或者理想情况下是它们的平均值)。

cuda vector thrust gradient-descent

2
推荐指数
1
解决办法
2315
查看次数

禁用一个函数的返回值优化

struct X {
  void * a;
  void * b;
};

X foo( void * u, void * v);
Run Code Online (Sandbox Code Playgroud)
  • foo()在汇编程序(i386)中实现
  • 类型X的返回值的地址作为隐藏参数传递给foo()

  • 如果使用-O0编译测试代码,则代码按预期工作

  • 如果用-O3编译分段错误发生(返回值被优化掉)
  • 如果使用-O3 -fno-elide-constructors编译,代码将再次按预期工作

如何强制编译器不为foo()添加RVO(又名强制-fno-elide-constructors)?

Update1:代码必须适用于任意编译器(至少gcc,clang,msvc),示例代码:

void * vp = bar();
X x = foo( vp, 0);
x = foo( x.a, 0);
x = foo( x.a, 0);
Run Code Online (Sandbox Code Playgroud)

Update2:问题是,编译器优化了x的实例

X x = foo( vp, 0);
x = foo( x.a, 0);
x = foo( x.a, 0)
Run Code Online (Sandbox Code Playgroud)

要么

X x1 = foo( vp, 0);
X x2 = foo( x1.a, 0);
X …
Run Code Online (Sandbox Code Playgroud)

c++ assembly return-value-optimization rvo nrvo

2
推荐指数
1
解决办法
771
查看次数

从void子函数中检索int值到C++中的函数

我是一名开始学习编码C++的基础学生.我正在为我的大学任务做一个调查程序,在测试之后,我发现子函数的总和值不能正确地与主函数中的值相加.任何一个帮助!

这是代码:

#include <iostream>

using namespace std;

int Q1();
int Q2();
int Q3();
int Q4();
int Q5();

int main()
{
    char select;
    int E, A, C, N, O;
    int extroversion=0, agreeableness=0, conscientiousness=0, neuroticism=0,          opennesstoexperience=0;

    cout << "This is a Self-Esteem Questionnaire." << endl;
    cout << "\nInsert S to start the test (Q to Quit): ";
    cin >> select;
    select=toupper(select);

    if (select=='S')
    {

    cout << "------------------INSTRUCTIONS-----------------" << endl;
    cout << "For each statement 1-50 mark how much you agree" << endl; …
Run Code Online (Sandbox Code Playgroud)

c++

2
推荐指数
1
解决办法
99
查看次数