The*_*ain 4 c++ gcc char google-nativeclient c++11
我读了一个关于以下区别的问题:
const char*
Run Code Online (Sandbox Code Playgroud)
和
const char[]
Run Code Online (Sandbox Code Playgroud)
虽然有一段时间,我虽然数组只是指针的语法糖.但有些事情让我烦恼,我有一些类似于以下的代码:
namespace SomeNamespace {
const char* str = { 'b', 'l', 'a', 'h' };
}
Run Code Online (Sandbox Code Playgroud)
我得到,错误:缩放器对象'str'在初始化器中需要一个元素.所以,我试过这个:
namespace SomeNamespace {
const char str[] = { 'b', 'l', 'a', 'h' };
}
Run Code Online (Sandbox Code Playgroud)
它起作用,起初我认为这可能与以下事实有关:当它是一个const char*时应用额外的操作,并且GCC从不是在函数外执行的操作的粉丝(这无论如何都是不好的做法),但错误似乎并不是这样.但是在:
void Func() {
const char* str = { 'b', 'l', 'a', 'h' };
}
Run Code Online (Sandbox Code Playgroud)
它按预期编译得很好.有谁知道为什么会这样?
x86_64/i686-nacl-gcc 4(.1.4?)pepper 19工具 - 链(基本上是GCC).
首先,如果您尝试在命名空间范围或函数中使用复合初始化,它没有任何区别:两者都不应该工作!当你写作
char const* str = ...;
Run Code Online (Sandbox Code Playgroud)
你有一个指向chars 序列的指针,例如,可以用字符串文字初始化.在任何情况下,chars都位于指针之外的其他位置.另一方面,当你写作
char const str[] = ...;
Run Code Online (Sandbox Code Playgroud)
您定义了一个chars 数组.数组的大小由右侧元素的数量决定,例如,变为4 { 'b', 'l', 'a', 'h' }.如果您使用,例如,"blah"相反,大小当然是5.数组的元素被复制到str这种情况下定义的位置.
注意,这char const x[] 可以等同于char const* x在某些上下文中编写:当您声明函数参数时,char const x[]实际上与...相同char const*.
| 归档时间: |
|
| 查看次数: |
1490 次 |
| 最近记录: |