小编Mat*_*son的帖子

为什么不是指向成员函数的指针只是像数据指针那样的内存地址

我从这个 FAQ条目中意识到,无法将指向成员函数的指针转换为/从void*.指向成员的原因不是内存地址,就像指向数据的指针一样!为什么这样?请帮我澄清一下.这不一定与成员函数,但任何正常的C函数,不是吗?

c c++

15
推荐指数
1
解决办法
731
查看次数

用C代码(GCC)定义程序段

在汇编语言中,很容易定义一个类似的部分:

.section foo
Run Code Online (Sandbox Code Playgroud)

如何在C代码中完成?我想将一段C代码放在一个特殊的部分而不是.text,所以我将能够将该部分放在链接描述文件的特殊位置.

我正在使用GCC.

gcc

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

不明白Stroustup先生的建议是删除抽象类Shape的复制默认和移动操作

我试图理解作者3.3.4 Suppressing Operations在他的新书(TCPL第4版)中的建议,但无济于事.

从书中摘录

对层次结构中的类使用默认副本或移动通常是一个灾难:只给出指向基类的指针,我们根本不知道派生类有哪些成员(§3.3.3),所以我们无法知道如何复制它们.所以,最好的办法是删除默认副本和移动操作; 也就是说,要消除这两个操作的默认定义:

class Shape {
public:
    Shape(const Shape&) =delete; // no copy operations
    Shape& operator=(const Shape&) =delete;
    Shape(Shape&&) =delete; //no move operations
    Shape& operator=(Shape&&) =delete;
    ~Shape();
};
Run Code Online (Sandbox Code Playgroud)

现在,编译器将捕获复制Shape的尝试.如果需要复制类层次结构中的对象,请编写某种克隆函数(第22.2.4节).

例如,下面的代码不能编译Shape(const Shape&) = delete;,因为clone()函数调用了Shape复制构造函数.

#include <iostream>

class Shape
{
    public:
    virtual ~Shape() {}
    Shape() {}
    Shape(const Shape&) {};
    virtual Shape* clone() const = 0;
};

class Circle: public Shape
{
    public:
    Circle(int i) : a(i) {}
    Circle* clone() const { …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

9
推荐指数
2
解决办法
470
查看次数

使用常用数学函数exp()log()时如何防止溢出?

一切都在标题中.使用exp()和log()两个函数时如何检查可能的溢出?

c c++ undefined-behavior

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

无法强制clang CompilerInstance对象将标头解析为C++文件

我有一个名为class.h的C++标头,我要解析:

class MyClass
{
  public:
    Class() {}
    ~Class() {}
    bool isTrue() const;
    bool isFalse() const;
  private:
    bool m_attrib;
};

bool MyClass::isTrue() const
{
  return true;
}
bool MyClass::isFalse() const
{
  return false;
}
Run Code Online (Sandbox Code Playgroud)

我使用clang编译器实例和AST使用者.我的所有代码都适用于c源文件.但我无法配置/强制CompilerInstance必须使用的语言.这是我使用的代码:

m_ci = new clang::CompilerInstance();
/*configure the langage to use*/
clang::CompilerInvocation *invocation = new clang::CompilerInvocation;
clang::LangOptions langOpts;
/*with langage = clang::IK_CXX*/
langOpts.CPlusPlus = 1; 
invocation->setLangDefaults(langOpts, langage);
m_ci->setInvocation(invocation);
m_ci->createDiagnostics();
llvm::IntrusiveRefCntPtr<clang::TargetOptions> pto( new clang::TargetOptions());
pto->Triple = llvm::sys::getDefaultTargetTriple();
clang::TargetInfo *pti = clang::TargetInfo::CreateTargetInfo(m_ci->getDiagnostics(), pto.getPtr());
m_ci->setTarget(pti);
m_ci->createFileManager();
m_ci->createSourceManager(ci->getFileManager());
m_ci->createPreprocessor();
/*add …
Run Code Online (Sandbox Code Playgroud)

c++ clang llvm-clang

7
推荐指数
1
解决办法
709
查看次数

`__declspec(align(#))`如何工作?

是的,我已经阅读:http://msdn.microsoft.com/en-us/library/83ythb65.aspx 但它不是我清楚.首先,__declspec(align(#))使用它声明的每个对象(在一个结构中)以对齐的偏移量开始.那部分很清楚.该对象也是由对象所在的结构化"继承"的.但它不会改变对象的大小,是吗?确切地说,为什么sizeof()在这段代码中:

__declspec(align(32)) struct aType {int a; int b;};
sizeof(aType);
Run Code Online (Sandbox Code Playgroud)

回来32

c++ sizeof alignment visual-studio-2010 declspec

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

sendfile不会复制文件内容

我创建文件1.txt 2.txt并写入一些内容1.txt.
然后我使用下面的代码,并希望将内容复制到2.txt.
但它不起作用.什么都没有2.txt.

你能解释我的错误吗?

int main()
{
    int fd1 = open("1.txt",O_RDWR);
    int fd2 = open("2.txt",O_RDWR);          
    struct stat stat_buf ;
    fstat(fd1,&stat_buf);
    ssize_t size = sendfile(fd1,fd2,0,stat_buf.st_size);
    cout<<"fd1 size:"<<stat_buf.st_size<<endl; //output 41
    cout<<strerror(errno)<<endl; //output success

    close(fd1);
    close(fd2);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ linux system-calls sendfile

5
推荐指数
1
解决办法
2197
查看次数

在 GDB (C++) 中找到指向单例事后分析的指针

我正在对崩溃的程序进行事后分析。我在 Linux (Ubuntu 12.04, x86) 上,代码是用 C++ 编写的。本程序正在使用一些可能包含有价值信息的单例。如果像这样创建,是否可以找到指向单例实例的指针:

SingletonType& SingletonType::getInstance(){
    static SingletonType* instance = new SingletonType();
    return *instance;
}
Run Code Online (Sandbox Code Playgroud)

如果可能的话,它是如何在 GDB 中完成的?

c++ linux gdb postmortem-debugging

5
推荐指数
1
解决办法
1491
查看次数

在C中缩放原始的24位像素图

我试图缩小我捕获的X显示的大小,以便在新窗口中显示它.我尝试对各个RGB组件求平均值,但图像看起来不太好.这是我的算法:

  img = XGetImage(d_remote,RootWindow(d_remote,0),0,0,attr.width,attr.height,XAllPlanes(),ZPixmap);

   int i;
   int j;
   for(i=0;i<attr.height;i=i+2){
        for(j=0;j<attr.width;j=j+2) {
                unsigned long p1 = XGetPixel(img, j, i);
                unsigned long p1R = p1 & 0x00ff0000;
                unsigned long p1G = p1 & 0x0000ff00;
                unsigned long p1B = p1 & 0x000000ff;

                unsigned long p2 = XGetPixel(img, j+1, i);
                unsigned long p2R = p2 & 0x00ff0000;
                unsigned long p2G = p2 & 0x0000ff00;
                unsigned long p2B = p2 & 0x000000ff;

                unsigned long p3 = XGetPixel(img, j, i+1);
                unsigned long p3R = p3 & …
Run Code Online (Sandbox Code Playgroud)

c image pixel xlib

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

用char []创建一个字符串

#include <iostream>

using namespace std;

int main()
{
    char strin[206];

    strin = "sds";
    cout<<strin;
}
Run Code Online (Sandbox Code Playgroud)

为什么我会收到此错误?

error: incompatible types in assignment of 'const char [4]' to 'char [206]' //on line strin = "sds"
Run Code Online (Sandbox Code Playgroud)

我正在关注这个初学者教程

c++ string char

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

为什么即使在复制对象时也会检测到双重释放或损坏

我在以下代码中检测到glibc,有人可以向我解释一下

#include<iostream>
using namespace std;
class Sample
{
public:
       int *ptr;
       Sample(int i)
       {
           ptr = new int(i);
       }
       void PrintVal()
       {
       cout << "The value is " << *ptr<<endl;
       }
       ~Sample()
       {
           cout<<"CALLED\n";
            delete ptr;
       }
};
void SomeFunc(Sample x)
{
    cout << "Say i am in someFunc " << endl;
    x.PrintVal();
    //cout<<*(s1.ptr)<<endl;
}
int main()
{
Sample s1=10;
cout<<*(s1.ptr)<<endl;
SomeFunc(s1);
cout<<"HERE\n";
cout<<*(s1.ptr)<<endl;
}
Run Code Online (Sandbox Code Playgroud)

在这里调用cout<<*(s1.ptr)<<endl;glib被检测到.我无法理解的是,为什么即使没有为s1调用desructor,引用也会被删除.

c++

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

使用visual studio,为什么在发布模式下成功运行时,C++程序无法在调试模式下运行

当我使用Visual Studio 2015进行编码时,我无法在"调试模式"下调试和运行我的程序,编译说"调试断言失败,迭代器+偏移超出范围",但是,我的程序可以在发布模式下成功运行,也可以在其他轻量级ide(代码:: blocks)中运行,这是什么原因?

c++ visual-studio

0
推荐指数
1
解决办法
111
查看次数

C++中"Float"数据类型的范围值

我需要验证浮点数据类型的最小值和最大值.

对于Ex:无符号__int8是0到255

像这样我需要扩展Float最小值和最大值.

float ----> 3.4E +/- 38(7位)如何扩展它.

c++

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