阅读gtest.cc 代码发现 字符串常量都定义成数组的形式,为什么不定义成指针呢?
// A test filter that matches everything.
static const char kUniversalFilter[] = "*";
// The default output file for XML output.
static const char kDefaultOutputFile[] = "test_detail.xml";
//为什么不定义成更简单的指针形式呢?
static const char *kUniversalFilter2 = "*";//??
原因:
定义成数组形式,数组变量地址和字符串首地址地址一样的。
定义成指针,指针变量本身额外占8个字节(64bit),访问字符串需要先读取指针的值,性能比数组形式稍差,指针的值等于字符串的首地址。
为什么编译器不优化指针的地址和字符串一样? 因为指针的值可以变,编译器不敢优化。在VS2017 x64 Release模式下测试发现即使定义成 const char * const 的形式,编译器也没有把指针地址优化成字符串。
因此字符串常量建议都定义成数组形式。
#include <iostream>
using namespace std;
const char *p = "12345678";
const char *q = "12345678";
const char *const s = "12345678";
const char arr[] = "12345678";
const char *const t = "12345678";
int main(int argc, char **argv) {
const char ar


245

被折叠的 条评论
为什么被折叠?



