小编Old*_*ier的帖子

为什么const模板化引用类型与const引用类型不同?

考虑这个模板:

template< typename T, typename RefT = T& >
class foo
{
    typedef const RefT const_ref_t;
    typedef const T&   another_const_ref_t;

    //...

};
Run Code Online (Sandbox Code Playgroud)

我会假设类型const_ref_tanother_const_ref_t等价物.两者都是const T&.但事实并非如此.唉,以下关于它们不等价的证明是相当复杂的.它取决于使用dynamic_cast<>来检查另一个类的类型.

class abstractBase
{
public: virtual ~abstractBase() {}
};

template< typename T >
class otherClass : public abstractBase
{
};

template< typename T, typename RefT = T& >
class foo
{
    typedef const RefT const_ref_t;
    typedef const T&   another_const_ref_t;

public:
    void discover( abstractBase* p )
    {
        otherClass< const_ref_t >* …
Run Code Online (Sandbox Code Playgroud)

c++ templates dynamic-cast typedef

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

为什么LLVM会抱怨缺少函数原型?

LLVM 2.1有一个选项,可以为"缺少函数原型"发出警告.启用后,警告会抱怨这样的文件:

double square( double d )
{
    return d*d;
}
void main()
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

函数"square"将触发警告,因为它是在未声明(原型)的情况下定义的.你可以消除警告:

double square( double d );
double square( double d )
{
    return d*d;
}
void main()
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

我用C++编程了二十年,我从未见过像这样的警告.这似乎对我没用.

默认情况下,此警告在Xcode 4.1中的新Mac控制台项目(至少)中启用.显然有人发现它首先实现它然后默认启用它是有用的.

为什么这是一个有用的警告?为什么LLVM会将其作为选项?为什么在Xcode上默认启用该选项?

c++ llvm compiler-warnings

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

维护双向UDP连接

我正在编写一个Android UDP客户端,它与Windows服务器连接并双向通信(发送和接收的消息之间没有关系).一旦将初始数据报发送到服务器,我希望能够随时向任一方向发送数据.我的问题是:

1)保持初始插座打开并将其用于发送和接收是否正确?

2)我应该在同一个线程中发送和接收(接收时超时)还是在单独的线程中(允许接收阻塞)?

3)如果在一定时间间隔内没有发送/接收数据,套接字会自动关闭吗?

sockets ip android udp datagram

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

在C++中自我初始化为nullptr的简单原始指针

我喜欢C++ 11中的新指针类型,但有时我还需要一个原始指针.然而,让我对C++中的"原​​始"类型越来越感到悲伤的是,当没有给出明确的值时,他们习惯于初始化为未定义.因为我经常使用std :: shared_ptr <>之类的东西,所以需要将原始指针初始化为null感觉越来越脆弱和不必要.我在说:

class foo
{
    ...
    std::shared_ptr< bar > pb;   // Initially null in whatever constructor.
    std::unique_ptr< dar > pd;   // Likewise.
    std::weak_ptr< gar > pg;     // And again.
    lar* pr;                     // Uh-oh! Who knows what this is? Better remember to initialize...
};

foo::foo( int j )
: pr( nullptr )
{...}

foo::foo( const string& s )
: pr( nullptr )
{...}

... etc.: many tedious and error-prone constructor definitions follow.
Run Code Online (Sandbox Code Playgroud)

因此,我想要的是"具有空初始化的原始指针".就像是:

class foo
{
    ...
    std::shared_ptr< …
Run Code Online (Sandbox Code Playgroud)

c++ pointers unique-ptr c++11

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

在 Xcode 中点击“全部替换”按钮的键?

我正在使用 Xcode 4.6.2 的文件内查找和替换功能。编程时,如果我能帮上忙,我不喜欢触摸鼠标,所以我会四处跳动以输入查找和替换文本。现在我想点击一个键或组合键来“启动”替换——实际上,点击“全部替换”按钮。这样的钥匙存在吗?

xcode replace keyboard-shortcuts xcode4

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