小编Coo*_*kie的帖子

带VC++的std :: atoll

我一直在使用std::atollfrom cstdlib将字符串转换为int64_t带有gcc 的字符串.该工具似乎在Windows工具链上不可用(使用Visual Studio Express 2010).什么是最好的选择?

我也有兴趣转换stringsuint64_t.整数定义取自cstdint.

c++ int64 uint64 strtol

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

现代C++编译器内联函数是否只调用一次?

比如说,我的头文件是:

class A
{
    void Complicated();
}
Run Code Online (Sandbox Code Playgroud)

和我的源文件

void A::Complicated()
{
    ...really long function...
}
Run Code Online (Sandbox Code Playgroud)

我可以将源文件拆分为

void DoInitialStuff(pass necessary vars by ref or value)
{
    ...
}
void HandleCaseA(pass necessary vars by ref or value)
{
    ...
}
void HandleCaseB(pass necessary vars by ref or value)
{
    ...
}
void FinishUp(pass necessary vars by ref or value)
{
    ...
}
void A::Complicated()
{
    ...
    DoInitialStuff(...);
    switch ...
        HandleCaseA(...)
        HandleCaseB(...)
    ...
    FinishUp(...)
}
Run Code Online (Sandbox Code Playgroud)

完全是为了可读性而不担心性能方面的影响?

c++ performance code-organization

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

C++逻辑和运算符

C++中是否有逻辑&运算符?例如,一个与&&一样工作的运算符,除了它还评估后面的参数,即使前面的参数已经评估为false?运算符&是我理解的按位和运算符.

c++

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

将可执行文件限制为在特定计算机上运行的最简单方法

我正在尝试创建一个只能在一台机器上运行的可执行文件.实现这一目标的最简单方法是什么?许可证文件?或者是否有一个机器地址非常类似于网络连接的MAC我可以硬编码到可执行文件中?

c++ security

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

SFINAE:运算符[]上的decltype

根据这里这里的答案,我试图使用以下

template <typename T>
using operator_square_brackets = decltype(&T::operator[]);
Run Code Online (Sandbox Code Playgroud)

它在视觉工作室失败了

error C2760: syntax error: expected ')' not ']'
Run Code Online (Sandbox Code Playgroud)

有想法该怎么解决这个吗?

c++ sfinae visual-studio

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

C++不可复制,有时除外

我发现制作一个不可复制的类对我的代码质量有很大帮助.最初我用boost :: noncopyable做了这个,但我发现VC++编译器错误没有私有成员那么有用(双击导致代码中的错误位置).

T(T const&);
T& operator=(T const&);
Run Code Online (Sandbox Code Playgroud)

事实上,它已经提醒我很多案例没有通过课程作为参考.这么多,即使在我只需要复制构造一次的类上,我也非常希望得到警告.

有没有办法做到这一点?我想的是将上面两个方法保留为私有并添加一个公共T(T const&,bool dummy)构造函数来调用,当我真的想要复制构造时.或者可以选择将上面的两个方法公开,并在复制构造时以某种方式激活编译器警告,抑制我想要的警告.

或者也许有更好的方式?

c++ noncopyable

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

Google Protocol Buffers:用于C++的parseDelimitedFrom和writeDelimitedTo

很抱歉再次提出这个问题,但我们可以一劳永逸地发布一些与Java相匹配的C++函数吗?它们似乎没有被谷歌添加,自己编写它们是一件非常痛苦的事情.下面的答案使用一些的这个这个.

c++ protocol-buffers

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

C++:使用指向派生类的指针的虚函数调用仍然具有vlookup

只是想知道,如果我有一个指向最派生类的指针,并在其上调用一个虚拟函数(大多数派生类定义),这是否仍会导致虚拟表中的查找?

毕竟,在编译时,编译器知道这个类是派生最多的,它知道它定义了虚函数,没有歧义,所以它应该只把它当作非虚函数?

或者我错过了什么?

我问的原因是我正在编写一个模板,我想从后面派生出来合并代码,不同的函数将在派生类中实现.

没有必要在模板中将这些函数定义为虚拟,但如果稍后忽略该虚拟调用,我正在考虑这样做,纯粹是为了向实现者可视化,以后需要仍然编写哪些函数.

c++ virtual inheritance templates

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

C++生成标准构造函数

我经常发现自己编写非常简单的类而不是C风格的结构.它们通常看起来像这样:

class A
{
public:
  type mA;
  type mB;
  ...
  A(type mA,type mB,...) : mA(mA),mB(mB),... {}
}
Run Code Online (Sandbox Code Playgroud)

这是一种明智的做事方式吗?如果是,我想知道是否有任何第三方插件或任何方便的捷径来自动构造构造函数的文本(例如,采用突出显示或存在的成员定义,用逗号替换分号,将所有内容移动到同一行, ...)?谢谢

c++ constructor

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

为同步服务器提升asio,保持TCP会话开放(使用google proto缓冲区)

我目前有一个非常简单的boost :: asio服务器,在连接时发送状态更新(使用google proto缓冲区):

try
{
  boost::asio::io_service io_service;
  tcp::acceptor acceptor(io_service,tcp::endpoint(tcp::v4(), 13));
  for (;;)
  {
    tcp::socket socket(io_service);
    acceptor.accept(socket);
    ...
    std::stringstream message;
    protoMsg.SerializeToOstream(&message);
    boost::system::error_code ignored_error;
    boost::asio::write(socket, boost::asio::buffer(message.str()), ignored_error);
  }
}
catch (std::exception& e) { }
Run Code Online (Sandbox Code Playgroud)

我希望在接受新连接后将其扩展到第一次读取,检查收到的请求,并根据此消息发回不同的消息.我还想保持TCP连接打开,以便客户端不必重新连接,并且想要处理多个客户端(不是很多,可能是2或3).

我看了几个关于boost asio的例子,即异步时间tcp服务器聊天服务器,但两者都有点超过我的想法.我甚至不知道我是否需要异步服务器.我想我之后可以做一个阅读acceptor.accept(socket),但我想我不会继续听取进一步的请求.如果我进入循环,我想这意味着我只能处理一个客户端.所以我猜这意味着我必须去异步?是否有一个更简单的例子可能不是250行代码?或者我只是想通过这些例子咬我的方式?谢谢

c++ sockets tcp boost-asio

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