考虑这个模板:
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_t和another_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) 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上默认启用该选项?
我正在编写一个Android UDP客户端,它与Windows服务器连接并双向通信(发送和接收的消息之间没有关系).一旦将初始数据报发送到服务器,我希望能够随时向任一方向发送数据.我的问题是:
1)保持初始插座打开并将其用于发送和接收是否正确?
2)我应该在同一个线程中发送和接收(接收时超时)还是在单独的线程中(允许接收阻塞)?
3)如果在一定时间间隔内没有发送/接收数据,套接字会自动关闭吗?
我喜欢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) 我正在使用 Xcode 4.6.2 的文件内查找和替换功能。编程时,如果我能帮上忙,我不喜欢触摸鼠标,所以我会四处跳动以输入查找和替换文本。现在我想点击一个键或组合键来“启动”替换——实际上,点击“全部替换”按钮。这样的钥匙存在吗?