小编Kir*_*sky的帖子

局部变量范围问题

为什么以下代码打印"xxY"?局部变量不应该存在于整个函数的范围内吗?我可以使用这种行为,或者在将来的C++标准中会改变这种行为吗?

我认为根据C++标准3.3.2" 块中声明的名称是该块的本地名称.它的潜在范围从其声明点开始,并在其声明区域的末尾结束. "

#include <iostream>
using namespace std;

class MyClass
{
public:
  MyClass( int ) { cout << "x" << endl; };
  ~MyClass() { cout << "x" << endl; };
};

int main(int argc,char* argv[])
{
  MyClass  (12345);
// changing it to the following will change the behavior
//MyClass m(12345);
  cout << "Y" << endl;

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

基于响应,我可以假设这MyClass(12345);是表达式(和范围).这是有道理的.所以我希望以下代码将始终打印"xYx":

MyClass (12345), cout << "Y" << endl;
Run Code Online (Sandbox Code Playgroud)

并且允许进行这样的替换:

// this much strings with explicit scope
{
  boost::scoped_lock lock(my_mutex); …
Run Code Online (Sandbox Code Playgroud)

c++ scope raii

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

变量bstr到std :: string转换的默认编码

我有一个从MSXML DOM中提取的变量bstr,所以它是UTF-16.我试图找出此转换发生的默认编码:

VARIANT vtNodeValue;
pNode->get_nodeValue(&vtNodeValue);
string strValue = (char*)_bstr_t(vtNodeValue);
Run Code Online (Sandbox Code Playgroud)

从测试来看,我认为默认编码是Windows-1252或Ascii,但我不确定.

顺便说一句,这是我正在修复的代码块,并将变量转换为wstring,并通过调用WideCharToMultiByte进行多字节编码.

谢谢!

c++ com msxml std

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

取幂的前n位数

如何确定取幂的前n位数(a b).

eg: for a = 12, b = 13 & n = 4, the first 4 digits are 1069.
Run Code Online (Sandbox Code Playgroud)

c c++ math exponentiation

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

C++和进程内存保护

我知道WinAPI具有内置的黑客功能.

我甚至在带有Pinvoke的C#中使用它们......要破解Minesweeper ......很容易......所以...

我如何保护我的应用程序免受进程内存编辑,拒绝DLL注入和其他黑客方式.怎么样?!

希望WinAPI有类似无效的东西DontTouchMeOrIWillTerminateYou(bool protect)......

c++ windows winapi memory-management

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

如何在32位和64位环境中使用intptr_t可靠地专门化模板?

我有一个模板,我想专门研究两种int类型,其中一种是普通的int,另一种是intptr_t.在64位平台上,它们具有不同的大小,我可以轻松地做到这一点,但在32位上,两种类型都是相同的,编译器会抛出有关重新定义的错误.除了使用预处理器禁用其中一个定义外,我该怎么做才能解决它?

一些代码作为例子:

template<typename T>
type * convert();

template<>
type * convert<int>() { return getProperIntType(sizeof(int)); }

template<>
type * convert<intptr_t>() { return getProperIntType(sizeof(intptr_t)); }

//this template can be specialized with non-integral types as well, 
// so I can't just use sizeof() as template parameter.
template<>
type * convert<void>() { return getProperVoidType(); }
Run Code Online (Sandbox Code Playgroud)

c++ 64-bit templates 32-bit

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

GetWindowPlacement给出了不正确的窗口位置

如何使用Aero Snap功能查明窗口是否已调整大小?GetWindowPlacementfunction提供最新的"恢复"窗口大小.我用它如下:

WINDOWPLACEMENT wp = {};
wp.length = sizeof(WINDOWPLACEMENT);
::GetWindowPlacement( hWnd, &wp );
Run Code Online (Sandbox Code Playgroud)

例如,wp.rcNormalPosition = {top=208 bottom=520 left=152 right=510}它应该是 什么时候给出的{top=0 bottom=1920 left=152 right=510}.

请注意,GetWindowRect给出完全相同的错误结果.这是我的错,GetWindowRect给出了正确的结果.

我需要在程序出口保存窗口状态并在启动时加载它,所以我需要知道如何放置窗口.如何找出实际的窗口坐标?


好吧,我用notepad.exe(以及一些其他标准的Windows组件)进行了几次测试,并以同样的方式保存其状态 - 它不记得它是否"被抢购".所以我认为这是Windows程序的预期行为.

c++ windows winapi windows-7 aero-snap

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

以编程方式检查数字签名

我有一个项目的exe,我正在使用数字签名签名,这意味着当它要求管理员权限时,它会显示公司名称.这非常有效但是如果你修改exe它仍然可以工作并在那里显示未知.

有没有办法在运行exe时检查数字签名是否有效,以避免修改版本运行?

Visual Studio 2008 windows 7

c++ winapi digital-signature windows-7

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

以编程方式更改Linux上的壁纸

如何在C/C++程序中更改Linux桌面上的壁纸(使用GNOME)?有没有系统API可以做到这一点?

c++ linux gnome desktop-wallpaper wallpaper

6
推荐指数
2
解决办法
5114
查看次数

暂停远程进程的执行(C、Windows)

我可以使用 SuspendThread() 挂起另一个进程的线程。有没有办法完全暂停该进程的执行?如果是,请发布代码。

谢谢。

PS:既然你会问“你为什么要这样做”,我就把它贴在这里。我正在处理不再维护的遗留软件。我无权访问源代码。现在我需要它暂停,直到文件充满数据,然后恢复执行。

c windows winapi process suspend

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

当图形VertexList = vecS时remove_vertex

我有一个带有VertexList = vecS的Boost图.

typedef adjacency_list <listS, vecS, undirectedS, TrackInformation, LinkInformation> TracksConnectionGraph;
Run Code Online (Sandbox Code Playgroud)

现在我想迭代我的顶点并删除那些具有特定属性的顶点.我怎样才能做到这一点?

问题是每当我调用remove_vertex时,图中顶点的迭代器以及顶点描述符都会失效.

c++ boost boost-graph

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