断点如何在C++代码中工作?在编译代码时,它们是否在某些汇编指令之间插入了特殊指令?或者还有其他的东西吗?此外,如何实现代码逐步执行?和断点一样......?
我编码一些C++的小爱好的项目时,我注意到,我使用C风格的操作来访问IO( ,printf
,fopen
等).
在C++项目中涉及C函数是否被认为是"不良做法"?使用流而不是C风格的IO访问有什么好处?
我正在查找关键字volatile
以及它的用途,我得到的答案非常多:
它用于防止编译器优化代码.
有一些示例,例如轮询内存映射硬件时:没有volatile
轮询循环将被删除,因为编译器可能会识别出条件值永远不会更改.但由于只有一个例子或两个例子,它让我思考:volatile
在避免不必要的优化方面我们还需要使用其他情况吗?条件变量是唯一volatile
需要的地方吗?
我认为优化是特定于编译器的,因此未在C++规范中指定.这是否意味着我们必须通过直觉,说嗯,我怀疑如果我没有声明该变量volatile
或者是否有任何明确的规则,我的编译器将废除它?
我用C++编写了一个Windows程序,它有时使用两个线程:一个后台线程用于执行耗时的工作; 和另一个用于管理图形界面的线程.这样,程序仍然响应用户,这需要能够中止某个操作.线程通过共享bool
变量进行通信,该变量设置为true
当GUI线程通知工作线程中止时.这是实现此行为的代码(我已经删除了不相关的部分):
class ProgressBarDialog : protected Dialog {
/**
* This points to the variable which the worker thread reads to check if it
* should abort or not.
*/
bool volatile* threadParameterAbort_;
...
BOOL CALLBACK ProgressBarDialog::DialogProc( HWND dialog, UINT message,
WPARAM wParam, LPARAM lParam ) {
switch( message ) {
case WM_COMMAND :
switch ( LOWORD( wParam ) ) {
...
case IDCANCEL :
case IDC_BUTTON_CANCEL :
switch ( progressMode_ ) {
if ( …
Run Code Online (Sandbox Code Playgroud) 我刚刚完成了一个C++程序,我已经实现了自己的异常(虽然派生自std :: exception).当一个异常导致连锁反应,向上传播错误并引起其他异常时,我应用的做法是在模块的每个适当步骤(读取类)中连接错误消息.即旧的异常本身被删除并创建一个新的异常,但是有一个更长的错误消息.
这可能适用于我的小程序,但我最终对我的方法不太满意.例如,除最后一个异常外,不保留行号(虽然目前不应用)和文件名; 实际上,在第一个例外中,这些信息最受关注.
我认为通过将异常链接在一起可以更好地处理这个问题; 即在新异常的构造函数中提供旧异常.但是如何实施呢?当它们超出方法的范围时,异常是否会死亡,从而阻止使用异常指针?如果异常可以是任何派生类,如何复制和存储异常?
这最终促使我考虑在C++中链接异常是否是一个好主意.也许应该只创建一个异常然后添加额外的数据(就像我一直在做的那样,但可能会以更好的方式)?
你对此有何回应?是否应将由另一个引起的异常链接在一起以保留某种"异常追踪" - 以及如何实施? - 或者是否应该使用单个例外并附加其他数据 - 应该如何做?
我有一个包含N*10行的文件,每行包含一个数字.我需要总结每10行,然后打印出每个这样的组的平均值.我知道这是可行的awk
,我只是不知道如何.
什么时候编译器可以进行优化会导致我的C++代码表现出错误的行为,如果没有执行这些优化,那么这些行为将不会出现?例如,volatile
在某些情况下不使用会导致程序行为不正确(例如,不从内存重新读取变量的值,而只读取一次并将其存储在寄存器中).但是,在开启最具侵略性的优化标志之前,还有其他陷阱应该知道吗,然后想知道为什么程序不再起作用了?
我在C++ Primer中读到了main
不允许递归调用的问题,并且在SO的一些相关问题中确实证实它是非法的.
但为什么这是非法的?只要你避免堆栈溢出,调用main
内部的问题是什么?
在单核处理器上进行上下文切换时,负责的代码在唯一负责切换线程的CPU上执行.
但是,当我们有多个CPU时,这是如何完成的?是否有主CPU执行所有从CPU的所有上下文切换?每个CPU是否负责自己的上下文切换?如果是这样,切换如何同步,以便两个CPU不执行相同的线程?或者是否有其他机制?
我正在使用以下方法将文件的内容读入字符串:
std::ifstream t("file.txt");
std::stringstream buffer;
buffer << t.rdbuf();
std::string data(buffer.str());
Run Code Online (Sandbox Code Playgroud)
但是,如何检查I/O错误并确保实际读取了所有内容?