使用static constvars比#define预处理器更好吗?或者也许取决于背景?
每种方法的优点/缺点是什么?
我想xml在我做很多其他事情之前从文件中读取字符串,比如setText在窗口小部件上做什么,所以如果没有要调用的活动对象,我怎么能这样做getResources()呢?
有什么区别
char* name
Run Code Online (Sandbox Code Playgroud)
它指向一个常量字符串文字,和
const char* name
Run Code Online (Sandbox Code Playgroud) 我感兴趣的是,const在JavaScript中使用特定功能可以设置哪些类型的值有任何限制.这有效吗?虽然它确实有效,但是出于任何原因它被认为是不好的做法?
const doSomething = () => {
...
}
Run Code Online (Sandbox Code Playgroud)
是否应该在ES6中以这种方式定义所有功能?如果是这样的话,似乎并没有这样.
谢谢你的评论!
我不是在讨论指向const值的指针,而是指向const指针本身.
我正在学习C和C++,超越了基本的东西,直到今天我才意识到指针是通过值传递给函数的,这是有道理的.这意味着在函数内部,我可以使复制的指针指向其他值,而不会影响来自调用者的原始指针.
那么有一个函数头是什么意思:
void foo(int* const ptr);
Run Code Online (Sandbox Code Playgroud)
在这样的函数里面你不能让ptr指向别的东西因为它是const并且你不希望它被修改,但是这样的函数:
void foo(int* ptr);
Run Code Online (Sandbox Code Playgroud)
工作也一样好!因为无论如何都会复制指针,即使您修改了副本,调用者中的指针也不会受到影响.那么const的优势是什么?
以下声明之间有什么区别?
char * const a;
const char * a;
Run Code Online (Sandbox Code Playgroud)
为了理解我写这个小程序的区别:
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char **argv)
{
char a = 'x';
char b = 'y';
char * const pc1 = &a;
const char * pc2 = &a;
printf ("Before\n");
printf ("pc1=%p\n", pc1);
printf ("*pc1=%c\n", *pc1);
printf ("pc2=%p\n", pc2);
printf ("*pc2=%c\n", *pc2);
*pc1 = b;
/* pc1 = &b; */
/* *pc2 = b; */
pc2 = &b;
printf ("\n\n");
printf ("After\n");
printf ("pc1=%p\n", pc1);
printf ("*pc1=%c\n", …Run Code Online (Sandbox Code Playgroud) 我试过了:
const ascii = "abcdefghijklmnopqrstuvwxyz"
const letter_goodness []float32 = { .0817,.0149,.0278,.0425,.1270,.0223,.0202, .0609,.0697,.0015,.0077,.0402,.0241,.0675, .0751,.0193,.0009,.0599,.0633,.0906,.0276, .0098,.0236,.0015,.0197,.0007 }
const letter_goodness = { .0817,.0149,.0278,.0425,.1270,.0223,.0202, .0609,.0697,.0015,.0077,.0402,.0241,.0675, .0751,.0193,.0009,.0599,.0633,.0906,.0276, .0098,.0236,.0015,.0197,.0007 }
const letter_goodness = []float32 { .0817,.0149,.0278,.0425,.1270,.0223,.0202, .0609,.0697,.0015,.0077,.0402,.0241,.0675, .0751,.0193,.0009,.0599,.0633,.0906,.0276, .0098,.0236,.0015,.0197,.0007 }
Run Code Online (Sandbox Code Playgroud)
首先,声明和初始化工作正常,但第二,第三和第四不起作用.如何声明和初始化const数组的浮点数?
参数之间有什么区别:
int foo1(const Fred &arg) {
...
}
Run Code Online (Sandbox Code Playgroud)
和
int foo2(Fred const &arg) {
...
}
Run Code Online (Sandbox Code Playgroud)
?我没有看到parashift FAQ中涉及的这个案例.
首先,你可能知道const可以用来制作一个对象的数据或一个不可修改的指针或两者兼而有之.
const Object* obj; // can't change data
Object* const obj; // can't change pointer
const Object* const obj; // can't change data or pointer
Run Code Online (Sandbox Code Playgroud)
但是您也可以使用以下语法:
Object const *obj; // same as const Object* obj;
Run Code Online (Sandbox Code Playgroud)
唯一重要的是你把const关键字放在星号的哪一边.我个人更喜欢把const上式的左边指定它的数据是不可修改的,因为我觉得它读取我的左到右的心态更好,但其语法是先?
更重要的是,为什么有两种正确的const数据指定方式,如果有的话,你会更喜欢或需要哪种方式?
编辑:
所以听起来这是一个武断的决定,因为编译器应该如何解释事物的标准早在我出生之前起草了.因为const应用于关键字左侧的内容(默认情况下?)我猜他们认为添加"快捷方式"以应用关键字并以其他方式输入限定符至少直到声明更改为止时没有任何损害解析*或&...
这是C的情况,然后我假设?