小编Mee*_*eeh的帖子

C++字符串:[] vs.*

一直在想,用[]或*声明变量之间的区别是什么?我看待它的方式:

char *str = new char[100];
char str2[] = "Hi world!";
Run Code Online (Sandbox Code Playgroud)

..应该是主要的区别,虽然我不确定你是否可以做类似的事情

char *str = "Hi all";
Run Code Online (Sandbox Code Playgroud)

..因为指针应该引用一个静态成员,我不知道它是否可以?

无论如何,真正困扰我的是知道以下两者之间的区别:

void upperCaseString(char *_str) {};
void upperCaseString(char _str[]) {};
Run Code Online (Sandbox Code Playgroud)

所以,如果有人能告诉我差异,我将不胜感激吗?我有一种预感,除了一些特殊情况外,两者都可以编译得相同吗?

泰

c++ syntax pointers reference

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

为什么stdafx.h的运行方式如何呢?

像往常一样,当我的大脑弄乱我无法弄明白的东西时,我来找你们帮忙:)

这次我一直想知道为什么stdafx.h的运行方式如何?根据我的理解,它做了两件事:

  • 包括我们可能(?)使用的标准标题,这些标题 很少被更改
  • 当代码不再预编译时,作为编译器书签工作.

现在,这两件事对我来说似乎是两个非常不同的任务,我想知道为什么他们没有采取两个单独的步骤来照顾它们?对我来说,有一个#pragma-command做书签的东西,并且可选地有一个标题文件,使用一长串的windows.h来做包括经常使用的标题......这样的事情似乎是合理的.这将我带到了我的下一个point:为什么我们被迫通过stdafx.h包含经常使用的头文件?就个人而言,我不知道我使用的任何常用标题我还没有自己的包含 - 但也许这些标题是.dll生成所必需的?

Thx提前

c++ precompiled-headers stdafx.h visual-studio

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

在某些东西本身变得线程安全之前,你有多低?

我一直在想,在某些东西是自动线程安全之前你必须要做的事情有多深?

快速举例:

int dat = 0;
void SetInt(int data)
{
    dat = data;
}
Run Code Online (Sandbox Code Playgroud)

..这种方法会被视为线程安全吗?为了确定,我通常将所有的设置方法都包含在互斥锁中,但每次我这样做时,我都忍不住认为这是一个无用的性能开销.我想这一切都分解为编译器生成的程序集?什么时候线程能够闯入代码?每个汇编指令还是每个代码行?在设置或销毁方法堆栈期间线程是否可以中断?像i ++这样的指令是否会被认为是线程安全的 - 如果不是,那么++ i呢?

Lotsa在这里提问 - 而且我不希望直接回答,但关于这个主题的一些信息会很棒:)

[更新]因为现在对我来说很明显(对你们这些人来说<3),在线程中唯一原子保护的东西是汇编指令,我知道这个问题:互斥和信号量包装类怎么样?像这样的类通常使用制作callstacks的方法 - 而且通常使用某种内部计数器的自定义semaphoreclasses不能保证原子/线程安全(无论你想要什么,只要你知道我的意思,我不在乎: P)

c++ multithreading thread-safety

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

将const char*缓存为返回类型

在我的C++上读了一下,发现这篇关于RTTI(运行时类型识别)的文章:http://msdn.microsoft.com/en-us/library/70ky2y6k(VS.80) .aspx.嗯,这是另一个主题:) - 但是,我在type_info-class中偶然发现了一个奇怪的说法,即关于::name-method.它说:" type_info::name成员函数返回一个const char*以空字符结尾的字符串,表示该类型的人类可读名称.指向的内存是缓存的,不应该直接取消分配."

你怎么能自己实现这样的东西!?我以前经常在这个问题上苦苦挣扎,因为我不想char为调用者删除一个新的-array,所以我坚持std::string到目前为止.

因此,为了简单起见,假设我想创建一个返回的方法"Hello World!",让我们调用它

const char *getHelloString() const;
Run Code Online (Sandbox Code Playgroud)

就个人而言,我会以某种方式使它(Pseudo):

const char *getHelloString() const
{
  char *returnVal = new char[13];
  strcpy("HelloWorld!", returnVal);

  return returnVal
}
Run Code Online (Sandbox Code Playgroud)

..但这意味着调用者应该delete[]在我的返回指针上做一个:(

Thx提前

c++ return-value char

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

使用std :: string时出现bad_alloc错误

我正在开发一个依赖于我提供文件路径的项目(例如.C:\Path.pth).现在,我昨天打电话给我std::string:

std::string path(`"C:\\Path.pth`");
Run Code Online (Sandbox Code Playgroud)

但现在它不起作用.它扔了一个bad_alloc.似乎' \'字符是问题.我甚至尝试使用\x5C它的ascii值,但结果相同.

现在,我的问题是,是否有可能我搞砸了一些#define,一些编译器选项或其他可能导致这种情况的"非代码"?我正在使用VS 2005.

任何帮助将非常感激


PierreBdR

..听起来很可能.或者至少,它必须:P

由于没有人提到某种/ SetStringCharSize:2bit-compiler选项,我认为可以安全地假设我的代码必须搞砸某些东西,并且它不仅仅是一个愚蠢的编译器选项(或类似的)错误. .

c++ stl exception stdstring

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