小编jhh*_*jhh的帖子

C++ - 带引用类型的模板实例化

我听过一些关于引用参考问题和这个解决方案的内容.我对C++委员会术语不是很了解,但我理解链接中的"Moved to DR"注释意味着这是符合标准的编译器应遵循的当前解释.

我有这个我无法理解的示例代码:

template <typename T>
struct C {
  void f(T&) { }
  void f(const T&) { }
};

int main() {
  C<int> x;        // OK
  C<int&> y;       // compile error: f cannot be overloaded
  C<const int&> z; // compile error: f cannot be overloaded
}
Run Code Online (Sandbox Code Playgroud)

我理解错误C<const int&>:使用DR#106中的规则,我们得到两个具有相同签名f(const int&)的方法.我不能得到的是C<int&>:它不应该生成完全相同的代码C<int>(至少根据Stroustrup的分辨率)?

c++ templates

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

__stdcall typedef g ++问题

这段代码编译(正如我所料):

typedef void __stdcall (*Func)();

struct A {
    static void __stdcall f() { }
};

int main() {
    Func p = A::f;
}
Run Code Online (Sandbox Code Playgroud)

但是这一个:

struct A {
    typedef void __stdcall (*Func)();
    static void __stdcall f() { }
};

int main() {
    A::Func p = A::f;
}
Run Code Online (Sandbox Code Playgroud)

失败时出现不太有用的错误消息:

error: invalid conversion from `void (*)()' to `void (*)()'
Run Code Online (Sandbox Code Playgroud)

我在Vista下使用g ++ 3.4.2(我知道,它很古老,但我现在无法访问任何其他环境).显然我在这里遗漏了一些东西.任何帮助,将不胜感激.

c++ windows g++ stdcall

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

标签 统计

c++ ×2

g++ ×1

stdcall ×1

templates ×1

windows ×1