我总是搞砸了怎么用const int*,const int * const和int const *正确的.是否有一套规则来定义您能做什么和不能做什么?
我想知道在任务,传递到职能等方面所做的所有事情和所有不应做的事情.
首先,你可能知道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的情况,然后我假设?
我几乎没有C ++经验。我的问题更多是关于确认某些查询是否正确思考。我试图理解一个代码,它包含以下行:
string ltrim(const string &);
Run Code Online (Sandbox Code Playgroud)
我看到了以下答案:1 .“ std :: string const&s”和“ const std :: string&s”之间有什么区别? 2. https://www.geeksforgeeks.org/stdstring-class-in-c/ 3. https://codereview.stackexchange.com/questions/32842/passing-parameters-by-reference
我知道按值调用和按引用调用的概念。
在我看来,这是在此处声明的函数名称,因为我知道C ++没有使用该名称的预定义函数。我是否正确地假设这意味着它是一个名为'ltrim'且类型为'string'的函数,并且此函数具有一个参数'a constant string type'。
但是,通常我们具有以下功能:
void abc (int &a)
Run Code Online (Sandbox Code Playgroud)
其中a是变量。什么是变量:
string ltrim(const string &);
Run Code Online (Sandbox Code Playgroud)
因为'const'具有预定义的含义,而'string'是数据类型。参数中传递的变量是什么?
我试图在互联网上寻找一些信息,但是我无法深入到一个用字符串来解释这一点的地方。
这是来自c++ 入门的代码:
string::size_type findChar(const string &s, char c, string::size_type & occurs){
auto ret = s.size();
occurs = 0;
for (decltype(ret) i = 0; i != s.size(); ++i){
if (s[i] == c){
if (ret == s.size())
ret = i;
occurs++;
}
}
return ret;
}
int main () {
string::size_type ctr;
cout << findChar("hello, world!", 'o', ctr);
}
Run Code Online (Sandbox Code Playgroud)
const从 中删除后发生错误const string &s。
错误:无法将类型为 'std::__cxx11::string&' {aka 'std::__cxx11::basic_string&'} 的非常量左值引用绑定到类型为 'std::__cxx11::string' {aka 'std 的右值::__cxx11::basic_string'} cout << findChar("hello, world!", 'o', …