[C ++ vs C:以有效的方式传递字符串列表

问题描述 投票:0回答:1
#include <iostream>
#include <vector>
#include <string>

void function1(const char** keywords) {  // C like
    for (const char** keyword = keywords; *keyword; ++keyword) {
        std::cout << *keyword << std::endl;
    }
}

void function2(const std::vector<std::string>& keywords) {  // C++11 like
    for(const std::string& keyword : keywords) {
        std::cout << keyword << std::endl;
    }
}

int main() {
    static const char* keywords[] = { "hello", "world", "!", 0 };
    function1(keywords);
    function2({ "hello", "world", "!" });
    return 0;
}

两个函数的结果相同。我喜欢新的c ++ 11初始化格式,其中值是内联的,我可以跳过空值(零)。问题是性能。我希望function2将在每次调用时动态分配内存。我想这不会有效。有没有更好的方法可以使用C ++方式来实现这种功能,同时保持旧的C效率?

c++ performance c++11
1个回答
0
投票

如果string数组大小是固定的,则可以使用std::array,就性能而言,它与C数组基本相同,它很像C中的固定大小的char数组。


0
投票

这里的问题是C和C ++编译器现在正在优化

© www.soinside.com 2019 - 2024. All rights reserved.