我已经在基础c ++库上工作了一段时间,而且我有很多想法可以真正简化代码编写和管理过程.其中之一是引入一些宏来帮助简化经常出现的语句,但比必要时复杂一点.
例如,我想出了这个基本宏来简化最常见的for循环类型:
#define loop(v,n) for(unsigned long v=0; v<n; ++v)
Run Code Online (Sandbox Code Playgroud)
这将使您能够替换那些看起来如此笨重的笨重的循环:
for (int i = 0; i < max_things; i++)
Run Code Online (Sandbox Code Playgroud)
使用更容易编写的内容,甚至更高效:
loop (i, max_things)
Run Code Online (Sandbox Code Playgroud)
使用这样的约定是一个好主意吗?使用不同类型的编译器可能会遇到任何问题吗?对于不熟悉宏的人来说,这会让人感到困惑吗?
所以,我想更好地掌握C++中的字符串文字是如何工作的.我主要关注的是你将字符串文字的地址分配给指针并传递它的情况.例如:
char* advice = "Don't stick your hands in the toaster.";
Run Code Online (Sandbox Code Playgroud)
现在让我说我只是通过在程序的持续时间内复制指针来传递这个字符串.当然,这可能不是一个好主意,但我很好奇幕后会发生什么.
再举一个例子,假设我们创建一个返回字符串文字的函数:
char* foo()
{
// function does does stuff
return "Yikes!"; // somebody's feeble attempt at an error message
}
Run Code Online (Sandbox Code Playgroud)
现在让我们说这个函数经常调用,字符串文字只用了大约一半的时间:
// situation #1: it's just randomly called without heed to the return value
foo();
// situation #2: the returned string is kept and used for who knows how long
char* retVal = foo();
Run Code Online (Sandbox Code Playgroud)
在第一种情况下,实际发生了什么?字符串刚刚创建但未使用,并且从未取消分配?
在第二种情况下,只要用户发现需要它,字符串是否会被维护?当不再需要它时会发生什么......那个存储器会被释放(假设没有任何东西指向那个空间)?
不要误解我的意思,我不打算像这样使用字符串文字.我打算使用容器来检查我的字符串(可能是std :: string).我大多只是想知道这些情况是否会导致内存管理或数据损坏的问题.