我知道他们是不同的,我知道他们是如何不同的,我读了所有关于char*vs的问题char[]
但所有这些答案都没有告诉他们何时应该使用它们.
所以我的问题是:
你什么时候用的
const char *text = "text";
Run Code Online (Sandbox Code Playgroud)
你什么时候用的
const char text[] = "text";
Run Code Online (Sandbox Code Playgroud)
有没有指导方针或规则?
举个例子,哪一个更好:
void withPointer()
{
const char *sz = "hello";
std::cout << sz << std::endl;
}
void withArray()
{
const char sz[] = "hello";
std::cout << sz << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
(我知道std::string也是一个选项,但我特别想了解char指针/数组)
我一直在寻找的请求剖析从升压:: ASIO例子,我想知道为什么私有成员函数一样is_char()的static?:
class request_parser
{
...
private:
static bool is_char(int c);
...
};
Run Code Online (Sandbox Code Playgroud)
它用在函数消耗中,它不是静态函数:
boost::tribool request_parser::consume(request& req, char input)
{
switch (state_)
{
case method_start:
if (!is_char(input) || is_ctl(input) || is_tspecial(input))
{
return false;
}
...
Run Code Online (Sandbox Code Playgroud)
只有成员函数可以调用,is_char()并且没有静态成员函数正在调用is_char().那么为什么这些函数是静态的呢?
如果你有一个公共函数可能抛出一个异常,它使用其他(私有或公共)辅助函数也可以抛出异常,我认为你应该记录公共函数可以抛出的异常,这包括辅助函数抛出的异常.
像这样(使用Doxygen):
/**
* @throw Exception ...
* @throw ExceptionThrownByHelper ...
* @throw ExceptionThrownByHelpersHelper ...
*/
void theFunction()
{
helperWhichMayThrowException();
}
Run Code Online (Sandbox Code Playgroud)
并且helperWhichMayThrowException()还调用可能抛出异常的其他函数.
为此,您可以:
theFunction()调用并查找该函数所引发的异常.这是很多工作,当您向助手添加异常时,您可能忘记在某处记录异常.theFunction()并转换它们,这样您就可以确定只抛出您指定的异常.但那么为什么要使用例外?我想使用选项4,但我还没有找到一个好的解决方案,也许它可以用Doxygen吗?或许我只是想要记录多少???
编辑:也许它不是很清楚,但我正在寻找一种简单的方法来记录所有异常(最好使用Doxygen)函数可能抛出而无需手动检查所有辅助函数.一种简单的方法包括"不记录所有异常"或"捕获并转换所有异常theFunction()"
我有一个创建线程的服务.该线程做一些工作,然后调用sendBroadcast()上Service.这意味着sendBroadcast()从工作线程调用,而不是从服务运行的线程调用.
这是好还是我应该确保sendBroadcast()从与Service(通过使用Handler和Runnable)相同的线程调用?
我在stackoverflow和Dianne Hackborns帖子上发现了这个.
根据帖子,它应该没问题.我问的原因是因为帖子是2岁,也许有些事情发生了变化.此外,我在Android文档中找不到任何相关内容.
异常类应该是可能抛出它们的类的一部分还是应该存在于更高级别?
例如 :
class Test
{
public:
class FooException: public ExceptionBase { };
void functionThrowingFooException();
};
Run Code Online (Sandbox Code Playgroud)
要么
class FooException: public ExceptionBase { };
class Test
{
public:
void functionThrowingFooException();
};
Run Code Online (Sandbox Code Playgroud)
(functionThrowingFooException()是唯一能抛出的功能FooException)
我遇到了这段代码:
void f(const std::string &s);
Run Code Online (Sandbox Code Playgroud)
然后打个电话:
f( *((std::string*)NULL) );
Run Code Online (Sandbox Code Playgroud)
我想知道其他人对这种结构的看法,它用于表示函数f()应该使用一些默认值(它计算)而不是一些用户提供的值.
我不知道该怎么想,它看起来很奇怪,但你觉得这个结构怎么样?
我似乎不明白的目的XMLString::transcode(XMLCh*)和XMLString::transcode(char*),因为很明显,我不明白之间的差别XMLCh*和char*.有人可以让我更清楚吗?
我想知道是否有一种使用8位数据类型从0到255计数的简洁方法,如:
for(uint8_t i(0);i<=255;++i)
{
....
}
Run Code Online (Sandbox Code Playgroud)
这显然不起作用,但它清楚地表明你想从0到255计数.
一个有效的解决方案是:
uint8_t i(0);
do
{
...
++i;
}
while(i > 0);
Run Code Online (Sandbox Code Playgroud)
但是在这里它根本不清楚从0到255的数量.
这也可以,但它只是丑陋恕我直言:
uint8_t i(0);
while(true)
{
...
if (i == 255)
{
break;
}
++i;
}
Run Code Online (Sandbox Code Playgroud)
所以我想知道,有没有一种干净的方法来做到这一点,而不使用更大的数据类型?
编辑:
我正在尝试实现一个简单的串行端口协议.它是这样的:
0xff收到0xff看到时,即使不像在数据中间那样预期,也意味着接收到新的数据包我可以实现这个使用boost::asio::serial_port与boost::asio::read()读取一个字节,并在接收时处理此字节.虽然这有效,但我想知道是否有更多"提升"的方式来做到这一点?
我一直在boost::asio::read_until()寻找阅读0xff,但后来我不知道如何丢弃这些数据.将数据存储在缓冲区中然后不使用缓冲区似乎有点浪费.
我可以使用boost::asio::read_until()读取直到数据包结束,但随后MatchCondition需要访问(缓冲区中的数据包的标头).似乎MatchCondition唯一得到最近收到的第一个和最后一个字节的迭代器.
此外,使用的数据boost::asio::read()最终在a中stream_buf,我必须将接收的数据解析为Packet对象.我可以Packet在一个单独的ParsePacket对象中进行解析,或者以某种方式将它与它集成boost::asio(类似于boost::asio::read(serial, myPacket);where myPacket的Packet对象)
当0xff在接收的数据中的任何地方看到时,这意味着新的数据包正在启动.因此,当0xff收到它时,它必须忘记任何先前接收的数据并开始接收新的数据包.
我打算使用异步操作并添加超时.
所以,我的问题是:在哪里实现这样的协议?或者更一般地,在哪里使用实现协议boost::asio.我不是在寻找有效的代码,而是建议在何处实现协议以及boost::asio使用哪些功能.
更新:
在这种情况下,没有使用流量控制(硬件或软件).
是否有关于何时规范化数据库或仅使用复合类型和数组的指南?
使用数组和复合类型时,我只能使用一个表.我也可以规范化数据库并使用几个表和连接.
你如何决定哪个选项最好?
c++ ×7
c ×2
exception ×2
android ×1
boost-asio ×1
char ×1
doxygen ×1
embedded ×1
postgresql ×1
protocols ×1
string ×1
xerces-c ×1
xml-parsing ×1