相关疑难解决方法(0)

重载分辨率和数组:应该调用哪个函数?

考虑以下程序:

#include <cstddef>
#include <cstdio>

void f(char const*&&)      { std::puts("char const*&&");      } // (1)
void f(char const* const&) { std::puts("char const* const&"); } // (2)

template <std::size_t N>
void f(char const (&)[N])  { std::puts("char const(&)[N]");   } // (3)

int main()
{
    const char data[] = "a";
    f(data);
}
Run Code Online (Sandbox Code Playgroud)

哪个f应该叫?为什么?

三个编译器的最新发布版本不同意这个问题的答案:

  • 当使用g ++ 4.5.2编译程序时调用(1)
  • 使用Visual C++ 2010 SP1编译程序时调用(2)
  • 使用Clang 3.0(trunk 127530)编译程序时调用(3 )

在不同的C++ 0x草案中,重载决策规则是否发生了很大变化?或者,这两个编译器真的完全错了吗?哪个重载是根据最新的C++ 0x草案选择的正确重载?

c++ arrays reference overload-resolution c++11

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

C++:如何阻止函数接受内联分配的指针?

无法弄清楚如何准确地说出问题,所以这是一个例子:

鉴于此功能原型:

void Foo(myClass* bar);
Run Code Online (Sandbox Code Playgroud)

我想阻止这种用法:

Foo(new myClass());
Run Code Online (Sandbox Code Playgroud)

而是需要先前创建的对象:

myClass* bar = NULL;
bar = new myClass();
Foo(bar);
Run Code Online (Sandbox Code Playgroud)

要么

myClass bar;
Foo(&bar);
Run Code Online (Sandbox Code Playgroud)

谢谢.


编辑

这是一个澄清的例子:


void Mouse::SetImage(BITMAP* image, int focusX, int focusY) {
    if(_image) {
        set_mouse_sprite(NULL);
        set_mouse_sprite_focus(0, 0);
        show_mouse(NULL);
        destroy_bitmap(_image);
        _image = NULL;
    }
    if(image) {
        _image = create_bitmap(image->w, image->h);
        clear_bitmap(_image);
        blit(image, _image, 0, 0, 0, 0, image->w, image->h);
    }
    if(image == NULL) {
        focusX = 0;
        focusY = 0;
    }
    _focusX = focusX;
    _focusY = …
Run Code Online (Sandbox Code Playgroud)

c++ parameters pointers function allegro

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