小编Iva*_*ars的帖子

C++等待用户输入

在控制台应用程序中等待用户输入的最佳方法是什么?

std::cout << "press any key to exit...";
// wait for user to hit enter or another key
Run Code Online (Sandbox Code Playgroud)

c++

100
推荐指数
4
解决办法
25万
查看次数

Visual Studio 2008与c ++ 11

我可以以某种方式使Visual C++ 2008拥有C++ 11库并使用C++ 11标准允许的所有好东西吗?

c++ visual-studio-2008 visual-c++ c++11

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

如何从数据缓冲区执行x86命令?

我的问题主要是专注于教授,并且是以"奇怪"的方式使用C++.在C++中,指向变量的指针和指向函数的指针之间没有太大区别.我们可以做一些像这样无用的事情:

char* buff     = new char[32];
void (*func)() = (void (*)())buff;
Run Code Online (Sandbox Code Playgroud)

但我们几乎创造了一个从未存在的功能,对吗?如果我们进一步用文件中的x86命令stord填充buff怎么办?操作系统永远不会知道创建了一个函数.

#include <iostream>
using namespace std;

// no stack push'ing or pop'ing, nothing to return
void func(void){cout << "Hello?";}

int main()
{
  char* x86_code = new char[6];

  x86_code[0]                 = 0x9A;          // call (far)
  *((__int32*)(x86_code + 1)) = (__int32)func; // load 32-bit address
  x86_code[5]                 = 0xC3;          // ret

  void (*x86_func)(void) = (void (*)(void))x86_code;
  x86_func();

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

调用x86_func()会产生运行时错误(违反读取位置0xFFFFFFFF).如果不是这样,操作系统如何在RAM中加载它的二进制文件或模块?非常感谢.

c++ x86 module

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

通过引用传递匿名变量

标准C++类型(如int或char)具有ctors,因此您可以使用以下表达式:

int a = int(67); // create anonymous variable and assing it to variable a
int b(13);       // initialize variable b
int(77);         // create anonymous variable
Run Code Online (Sandbox Code Playgroud)

用户定义的类型(结构或类)能够做同样的事情:

struct STRUCT
{
  STRUCT(int a){}
};

STRUCT c = STRUCT(67);
STRUCT d(13);
STRUCT(77);
Run Code Online (Sandbox Code Playgroud)

问题是:为什么我们可以通过引用匿名结构或类实例传递,但不能传递标准类型?

struct STRUCT
{
  STRUCT(int a){}
};

void func1(int& i){}
void func2(STRUCT& s){}
void func3(int i){}
void func4(STRUCT s){}

void main()
{
  //func1(int(56));  // ERROR: C2664
  func2(STRUCT(65)); // OK: anonymous object is created then assigned to a reference
  func3(int(46));    // …
Run Code Online (Sandbox Code Playgroud)

c++ anonymous pass-by-reference

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

功能有三个点参数

最近我找到了带有三个点参数的函数原型.我编写了自己的函数并编译得很好:

void func(int a, ...){}
Run Code Online (Sandbox Code Playgroud)

那是什么意思?

更新

感谢你们!我想到了.这是我的例子:

void func(unsigned int n_args, int arg, ...)
{
    for(unsigned int i = 0; i < n_args; ++i)
        cout << *((int*)&arg + i) << ' ';
}
Run Code Online (Sandbox Code Playgroud)

此函数打印出由空格字符分隔的参数.

c++ function

5
推荐指数
1
解决办法
7016
查看次数

c ++ std :: vector <> vs new []性能

在固定和相同长度之间std::vector<>和之间的分配,解除分配和访问时间是否有任何重大差异new[]

c++ new-operator stdvector

3
推荐指数
1
解决办法
1191
查看次数

关于转换构造函数和赋值运算符

如何操作foo = int可以由foo(int)(转换构造函数)和foo::operator=(int)(重载赋值运算符)完成?当一个人被召唤而不是其他人(也许一个是基本的)?

#include <iostream>

class foo
{    
  public:

    foo(){}

    foo(int r_value)
    {
      std::cout << "\nfoo::foo(int)\n";
    }

    void operator=(int r_value)
    {
      std::cout << "\nfoo::operator=(int)\n";
    }

};

int main()
{
  foo f;
  f = 57;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码使得operator=(int)当同时存在来运行和foo(int)如果operator=(int)被注释(或相反).

c++ constructor operator-overloading assignment-operator operator-keyword

2
推荐指数
1
解决办法
1095
查看次数

为什么不手动发送WM_PAINT

我已经读过,我不应该WM_PAINT手动发送,InvalidateRect而是应该打电话但是没有找到任何关于为什么不发送的信息.那为什么不呢?

更新适用InvalidateRect但不适用SendMessage(WM_PAINT)

LRESULT CALLBACK window_proc(HWND wnd, UINT msg, WPARAM w_param, LPARAM l_param)
{
  switch (msg)
  {
    case WM_PAINT:
        PAINTSTRUCT ps;
        HDC hdc = BeginPaint(wnd, &ps);

        Polyline(..);

        EndPaint(wnd, &ps);
        return 0;

    case WM_USER:           
        // SendMessage(wnd, WM_PAINT, NULL, NULL);
        // InvalidateRect(wnd, NULL, FALSE);

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

c++ winapi windows-messages wm-paint

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

x86函数调用类型

我是x86的新手.我的问题是关于函数调用.据我所知,有三种函数调用类型:短调用(0xe8),远调用(0x9a)和近调用(0x ??).有些呼叫短呼叫一个相对呼叫(ip + = arg/cs = inv)并远远调用绝对呼叫(ip = arg/cs = arg),但接近呼叫(ip =?/ cs =?)怎么样.有人说在32位系统上调用函数far(9a)几乎肯定是错误的.为什么?x86不代表32位系统吗?far call的参数是一个扁平的地址(我们在c ++或其他语言中使用的那个)或cs:ip notated以及如何将普通地址转换为cs:ip form?还有其他函数调用类型吗?

x86 assembly call instruction-set

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

std :: vector作为原始数组

获取第一个元素的地址std::vector并像原始数组一样使用它是否安全?数据是否连续排列?什么c ++标准说(c++98vs c++11)?这是一种常见的做法吗?

我有一些大小可能变化的数组和函数,它将指针和元素数量作为参数.管理数据并std::vector同时使用它会很棒my_func.

std::vector<int> my_vector;
void my_func(int* int_ptr, int num_ints);
// ..
my_func(&my_vector[0], my_vector.size());
Run Code Online (Sandbox Code Playgroud)

c++ stl stdvector

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

PC上的PlayStation 4软件

PlayStation 4具有使用x86指令集的CPU.几乎所有现代PC CPU都使用x86指令集.是否有可能在没有仿真的情况下在PC上运行PS4代码(因为PS4软件将具有本机PC代码)?据我所知,我们必须首先转换PS4可执行文件,使其在Windows,Linux和/或其他操作系统上运行.这可能是个问题吗?

x86 computer-architecture

0
推荐指数
1
解决办法
7945
查看次数

内联的标准是什么

由于内联请求不是强制性的,编译器如何计算哪个函数应该内联?我应该在什么样的功能内联?

额外的问题.我可以拨打内联电话吗?

void func{} // normal (not-inline) function

int main()
{
  func();           // normal call
  // inline func(); // inline call
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ inline

0
推荐指数
1
解决办法
471
查看次数

nameless char [] to std :: string&reference

是否可以通过参数将无名传递char[]给函数std::string&

#include <string>

void func(std::string&);

int main()
{
  func("nameless");
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ string pointers char

-1
推荐指数
1
解决办法
78
查看次数