小编use*_*635的帖子

澄清指向非静态类成员的指针

当我需要一个指向类成员的指针时,我会这样做

struct MyStruct
{
    int foo();
};

int (MyStruct::*p)() = &MyStruct::foo;
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么我需要使用&运算符来获取可能被忽略的地址(如果它是静态函数).另外,我听说指向成员的指针实际上并不是指针,有人可以澄清一下吗?

c++ pointers pointer-to-member language-lawyer

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

如何进行资格转换?

我有一个例子:

int i = 1;
const int *b = &i;
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我不明白的是,当地址i转换为指向const int的指针时.i在资格转换中是否将转换为const整数?在应用资格转换时,引擎盖下到底发生了什么?

c++ pointers const

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

将指向函数的指针转换为指向函数类型的不同指针的结果

(5.2.10/6)C++ 03指向函数的指针可以显式转换为指向不同类型函数的指针.通过指向函数类型(8.3.5)的函数调用函数的效果是未定义的,该函数类型与函数定义中使用的类型不同.除了将"指向T1的指针"的rvalue转换为"指向T2的指针"类型(其中T1和T2是函数类型)并返回其原始类型产生原始指针值之外,这种指针转换的结果未指定.[注意:有关指针转换的更多详细信息,另请参见4.10.]

以下是我正在尝试做的事情,虽然很明显转换fp1为的结果fp2将产生一个原始指针,但在同一点上标准中的措辞是"The result of such a pointer conversion is unspecified"什么意思呢?

int f() { return 42; }

int main()
{
    void(*fp1)() = reinterpret_cast<void(*)()>(f);

    int(*fp2)() = reinterpret_cast<int(*)()>(fp1);

    // Safe to call the function ?
    fp2();
}
Run Code Online (Sandbox Code Playgroud)

c++ function-pointers reinterpret-cast

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

为什么语句不能出现在命名空间范围内?

关于标准中哪条规则的任何想法都说明了这样的陈述:

p++; //where 'p' is pointer to array
Run Code Online (Sandbox Code Playgroud)

不能出现在全球范围内?

如果可能的话,我正在寻找一个参考,而不只是一个解释.

c++ standards compiler-errors

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

使用不确定的值初始化对象

以下是否调用未定义的行为?

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

参考C++ 03

(4.1/1)如果左值引用的对象不是类型T的对象,并且不是从T派生的类型的对象,或者如果对象未初始化,则需要此转换的程序具有未定义的行为.

编辑: 但是,从(3.3.1/1)开始,对象可能会使用自己的不确定值进行初始化,为什么会这样?即

int x = x; //not an undefined behaviour
Run Code Online (Sandbox Code Playgroud)

c++ initialization undefined-behavior

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

如何在功能中传递智能指针?

在下面的例子中,当我传递p给一个函数时,它会在函数func退出后立即被销毁

void func(std::auto_ptr<int> p)
{
   // deletes p
}

int main()
{
    std::auto_ptr<int> p(new int);
    func(p);
    *p = 1; // run-time error
}
Run Code Online (Sandbox Code Playgroud)

我还被告知,通过引用传递智能指针是"The C++ Standard Library - Nicolai M. Josuttis的参考"一书中非常糟糕的设计.

引用:

允许auto_ptr通过引用传递是非常糟糕的设计,你应该总是避免它.....

..... 根据auto_ptrs的概念,可以通过使用常量引用将所有权转移到函数中.

是不是可以通过智能指针或我有错误的想法?

c++ smart-pointers

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

short*到int*之间的转换

假设short是2个字节,并且int在32位OS上是4个字节.以下是未定义的行为吗?

short s = 42;
int *p = (int*)(&s);
Run Code Online (Sandbox Code Playgroud)

c++ undefined-behavior

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