gpt4 book ai didi

c++ - 作为另一个函数参数的函数调用是否遵循任何定义的行为?

转载 作者:行者123 更新时间:2023-11-30 00:55:25 24 4
gpt4 key购买 nike

在 C++11 中是否有关于以下内容的定义行为? (即 a = 1、2 或未定义)

void somefunc(int a, int b) {
std::cout << a << b << std::endl;
}

int i = 0;
somefunc(++i, ++i)

或者我应该写:

int i = 0;
int a = ++i;
int b = ++i;
somefunc(a, b);

我问的原因是我正在解析一个文件的选项,在一种情况下我想创建一个键值对。并具有类似如下的功能:

std::string create_key(std::string &source, size_t &size, int &index) {
std:: string key = "";
while(index < size) {
// parse the string to create the key
++index
}
return key;
}

// Value is an base class for a template class. Allowing me to store values
// of different data types inside a container.
Value* create_value(std::string &source, size_t &size, int &index) {
Value* value = nullptr;
while(index < size) {
// determine type and assign it to value
++index;
}
return value;
}

std::map<std::string, Value*> create_object(std::string &source, size_t &size, int &index) {
std::map<std::string, Value*> object;
while(index < size) {
// the line I think produces the same issue as my original example
object.insert(std::pair<std::string, Value*>(create_key(source, size, index), create_value(source, size, index)));
++index;
}
}

最佳答案

是的,因为您修改变量的方式与对同一变量的另一个修改没有先后顺序。注意逗号不是逗号运算符,会引入顺序,防止UB;它只是分隔函数参数。

你甚至做不到

somefunc(i, ++i)

不会导致未定义的行为。修改变量,然后单独调用函数(反之亦然,如果它是你想要的)。

关于c++ - 作为另一个函数参数的函数调用是否遵循任何定义的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12558065/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com