我现在有点困惑,我正在运行以下代码:
std::vector<int> test{1, 5, 10};
++test.at(1); // I'm trying to increment that number 5 to six, which works
std::cout << test.at(1) << std::endl; // Prints out 6 to the console
Run Code Online (Sandbox Code Playgroud)
我期待它给我一个编译器错误,因为正如我从运算符优先级中读到的,.(用于成员访问)和增量运算符 ( ++) 具有相同的优先级,但它们在语句中从左到右读取,从什么反正我明白了。所以在上面显示的代码中,我认为它等于 say (++test).at(1),这显然会导致编译器错误。为什么即使关联性从左到右也不是这种情况,为什么它会像这样读取它(根据我的想法)...... ++(test.at(1))?如果它们具有相同的优先级,不是吗,就像在数学中一样,例如,使用第++一个然后使用.?
我有一个分配内存然后返回指向该内存地址的指针的函数。我正在分配一个字符数组,它们传递给函数的参数将是数组大小。现在的问题是,如果它们0作为要动态分配的大小的参数传递,那么我想退出/返回该函数,但该函数本身返回 achar *所以我无法做类似的事情return -1;,我该怎么办围绕这一点,同时保留功能并执行逻辑以在那里分配内存?有办法吗?
char *alloate_memory(int x) { // This will assume you are allocating memory for a C-style string
if (x == 0)
return ;
char *mem{ new char[x] };
return mem;
}
Run Code Online (Sandbox Code Playgroud)