English 中文(简体)
c ++ 三. 最后的不断扼杀
原标题:c++ Final constant strings

在 Java,我们可以规定一个示意图为final,以宣布不变。 例如

static final String myConst = "Hello";

在++中这样做的正确方式是否好像这样?

const char * const myConst = "Hello";

我总是看到人们这样做:

const char * myConst = "Hello";

但是,实际上,你可以改变这一点。 因此,为什么人们没有宣布点名不变? 这样做的正确方式是什么?

最佳回答
const std::string myConst("Hello");
问题回答

是的,const char* const 是宣布一种不会改变的C型护法的正确方式。

或者更好:

#include <string>
const std::string myConst = "Hello";
const char * myConst = "Hello";

这意味着所指明的目标不能改变。

char * const myConst = "Hello";

这意味着点人指出的地点不能改变,但标的值可以改变。

const char * const myConst = "Hello";

这意味着两者都不会改变。 在我的经验中,没有人记住这一点,但总是在网上提供!

典型的情况是,在我写地雷时,有三人回答!

I don t exactly understand your question. To more or less mimic the final Java keyword, it would be either

const char * const myConst = "Hello";

(如果点人不会改变)和/或:

const char * myConst = "Hello";

如果点人随后可能发生变化。 最后,我们注意到,第一版无法真正改变点名本身,因为它是固定的。

既然是迭戈斯,那是正确的写法。 人们通常不会宣布变体会,因为他们不关心是否将对其加以修改,或者相信它会获得修改(因为know>/em>)。 他们不作修改。

他们宣布了“线索”,因为字面直面直面的直面特征确实是复杂的,因此,你确实必须把它分配给一个具有焦炭 *的数值的变量。

技术方面

char * const myConst = "Hello";

is the most correct answer, as reassigning the pointer would leave you with a string which probably could not be recovered.

某些执行使你能够改变“Hello”的特性(即使它有坏的想法),因此,这是第一种主人。

char const * const myConst = "Hello";

Is a great idea. Personally as

char const * myConst = ...;

and const char * myCount = ...;

同样,我倾向于执行一种风格准则,即,总会遵循它所修改的项目。 从长远来看,它有时会减少误解。

尽管如此,大多数人不知道如何在C++中正确使用<条码>const,因此,它要么根本没有使用过。 这是因为他们只是利用C++作为改进的C编纂者。

But, actually, you can change what that pointer points to. So, why do people not declare the pointer as constant as well? What is the correct way to do it?

由于它很少有用,更经常的是,你想要把价值观放在 st头上(包括点子)不是最根本的。 Get Sutter & Alexandrescu“编码标准”书解释了这一点。

真正的观点是,方案管理员必须至少作为<代码>const char*宣布在双引书之间储存果阵。 没有人强迫他们(没有编辑警告或错误)也使点固定下来......因为你们可以自己得出结论。 他们甚至可能真的试图确定一个不变的错误,他们只是想关闭汇编者错误(这里的警告)。

考虑到这一点,我或许会寻求一种不同的解决办法:

const char myConst[] = "Hello";

这里的区别是,我以这种方式赢得了用来指向点人的原星阵列,我仍然有可以确切地作为原始字面使用的星体阵列。

我可以做如下事情:sizeof(myConst),结果与sizeof(Hello)相同。 如果我改观点,面积将回升点人的规模,而不是方位的大小。

......而且显然在做事时,改变点人的方式变得毫无意义,因为现在没有任何改变点。





相关问题
Undefined reference

I m getting this linker error. I know a way around it, but it s bugging me because another part of the project s linking fine and it s designed almost identically. First, I have namespace LCD. Then I ...

C++ Equivalent of Tidy

Is there an equivalent to tidy for HTML code for C++? I have searched on the internet, but I find nothing but C++ wrappers for tidy, etc... I think the keyword tidy is what has me hung up. I am ...

Template Classes in C++ ... a required skill set?

I m new to C++ and am wondering how much time I should invest in learning how to implement template classes. Are they widely used in industry, or is this something I should move through quickly?

Print possible strings created from a Number

Given a 10 digit Telephone Number, we have to print all possible strings created from that. The mapping of the numbers is the one as exactly on a phone s keypad. i.e. for 1,0-> No Letter for 2->...

typedef ing STL wstring

Why is it when i do the following i get errors when relating to with wchar_t? namespace Foo { typedef std::wstring String; } Now i declare all my strings as Foo::String through out the program, ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

Window iconification status via Xlib

Is it possible to check with the means of pure X11/Xlib only whether the given window is iconified/minimized, and, if it is, how?

热门标签